>백엔드 개발 >C++ >`벡터 v(istream_iterator(cin), istream_iterator()());`가 함수 선언으로 구문 분석되는 이유는 무엇입니까?

`벡터 v(istream_iterator(cin), istream_iterator()());`가 함수 선언으로 구문 분석되는 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-21 02:49:08694검색

Why Does `vector v(istream_iterator(cin), istream_iterator()());` Parse as a Function Declaration?

가장 짜증나는 구문 분석의 수수께끼 측면 풀기

가장 짜증나는 구문 분석은 예상치 못한 코드 해석으로 이어질 수 있는 악명 높은 컴파일러 기발함입니다. 함수 선언과 유사한 줄이 실제로 다른 구성을 나타내는 경우 한 가지 난처한 경우가 발생합니다.

다음 줄을 고려하세요.

vector<int> v(istream_iterator<int>(cin), istream_iterator<int>()());

당황스럽게도 이 줄은 함수 선언으로 구문 분석될 수 있습니다. 두 번째 임시 반복자는 논리적으로 유형으로 해석될 수 있지만 첫 번째 임시 반복자의 역할은 덜 명확합니다.

첫 번째 임시 반복자의 특성 명확화

초기 가정과 달리 istream_iterator< int>(cin)은 함수 유형이 아닙니다. 오히려 대체 구문 istream_iterator와 동일합니다. cin.

C에는 인수 이름을 임의로 괄호로 묶을 수 있는 유사한 선언자 구문이 있습니다. 이 방법은 일반적으로 "실수"로 간주되어 권장되지 않지만 레거시로 인해 C에서는 여전히 지원됩니다.

따라서 istream_iterator(cin)는 istream_iterator 유형의 매개변수를 선언합니다. cin이라는 이름의 인수 이름 주위에 괄호를 제공함으로써 구문은 유형 지정에서 매개변수 이름을 효과적으로 분리합니다.

위 내용은 `벡터 v(istream_iterator(cin), istream_iterator()());`가 함수 선언으로 구문 분석되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.