가장 짜증나는 구문 분석: C 11의 모호성 풀기
C 11의 "가장 짜증나는 구문 분석" 모호성은 균일한 초기화 프로그램을 사용할 때 나타납니다. 다음 코드 조각에서 알 수 있듯이:
<code class="cpp">#include <iostream> class Timer { public: Timer() {} }; int main() { auto dv = Timer(); // Ambiguity: Object or function call? int time_keeper(Timer()); // Ambiguity: Pointer or call? return 0; }</code>
첫 번째 표현식 이해(auto dv = Timer())
첫 번째 표현식에서 auto 키워드는 다음을 의미합니다. dv의 유형은 등호(=) 오른쪽에 있는 초기화 프로그램에서 추론됩니다. 이니셜라이저는 인수 없이 Timer 객체를 반환하는 Timer 생성자를 호출하는 것입니다. 따라서 dv는 Timer 유형의 객체입니다.
두 번째 표현식 이해하기 (int time_keeper(Timer()))
두 번째 표현식에서는 모호성이 발생합니다. 컴파일러는 Timer()가 함수 호출인지 또는 참조로 전달된 Timer 유형의 객체인지 확인할 수 없습니다.
그러나 함수가 인수로 전달되면 포인터로 변하기 때문에 time_keeper의 실제 유형은 int(Timer(*)())입니다. 포인터-함수 해석을 선호하는 모호함.
위 내용은 가장 짜증나는 구문 분석: Timer() - 객체 호출인가, 함수 호출인가?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!