>백엔드 개발 >C++ >C에서 `벡터 v(istream_iterator(cin), istream_iterator());`를 함수 선언으로 해석하려면 어떻게 해야 합니까?

C에서 `벡터 v(istream_iterator(cin), istream_iterator());`를 함수 선언으로 해석하려면 어떻게 해야 합니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-16 12:13:10222검색

How Can `vector v(istream_iterator(cin), istream_iterator());` Be Interpreted as a Function Declaration in C  ?

가장 짜증나는 구문 분석: 혼란스러운 세부 사항 명확화

프로그래밍에서 "가장 짜증나는 구문 분석"은 C 구문의 악명 높은 모호성을 의미합니다. 예상치 못한 함수 선언이 발생할 수 있습니다. 이 글의 목표는 가장 짜증나는 구문 분석의 혼란스러운 측면 중 하나를 해결하는 것입니다.

다음 코드 줄을 고려하십시오.

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

이 줄을 함수 선언으로 어떻게 구문 분석할 수 있습니까?

구문 이해

일반적으로 가장 짜증나는 구문 분석 문제는 두 번째 임시 객체가 반복자를 반환하고 인수를 취하지 않는 함수로 해석될 때 발생합니다. 그러나 이 경우 딜레마를 일으키는 것은 첫 번째 임시 개체인 istream_iterator(cin)입니다.

첫 번째 임시 개체인 istream_iterator(cin)는 istream_iterator(cin)와 동일합니다. 정수> 불필요한 괄호가 있는 cin. 이 구문은 C에서 차용되었으며 실수로 인정되었습니다.

해석

컴파일러는 istream_iterator(cin)을 매개변수 선언으로 해석합니다. istream_iterator 유형의 cin으로 명명되었습니다. 괄호는 명령문의 의미에 영향을 주지 않습니다.

따라서 코드 줄은 istream_iterator 유형의 매개변수 cin이 하나 있는 함수 선언으로 해석됩니다. 이 함수는 정수 벡터를 반환합니다.

인수 목록의 임의의 괄호

istream_iterator(cin)에서 cin 주위의 괄호는 해당 함수가 괄호 안의 함수에 대한 인수입니다. 대신 istream_iterator 유형의 값으로 평가되는 표현식을 포함합니다.

결론

이 사례를 이해하는 열쇠는 불필요한 괄호는 명령문의 의미를 변경하지 않습니다. istream_iterator(cin)을 괄호 안의 함수 호출이 아닌 매개변수 유형으로 해석하면 가장 짜증나는 구문 분석의 이 특정 예에서 혼란이 제거됩니다.

위 내용은 C에서 `벡터 v(istream_iterator(cin), istream_iterator());`를 함수 선언으로 해석하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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