가장 짜증나는 구문 분석 혼란: 모호성 명확화
C 11에서 균일 초기화 프로그램은 "가장 짜증나는 구문 분석"이라고 알려진 미묘한 모호성을 도입합니다. 이 문제를 보여주는 예를 살펴보겠습니다.
<code class="cpp">#include <iostream> class Timer { public: Timer() {} }; int main() { auto dv = Timer(); // What is Timer() ? And what type is dv? int time_keeper(Timer()); // This is a function right? And why isn't the argument " Timer (*) ()"? return 0; }</code>
분석:
첫 번째 줄:
<code class="cpp">auto dv = Timer();</code>
두 번째 줄:
<code class="cpp">int time_keeper(Timer());</code>
이를 증명하려면 다음 프로그램을 고려하세요.
<code class="cpp">#include <type_traits> struct Timer { }; int main() { int time_keeper(Timer()); static_assert( std::is_same< decltype(time_keeper), int(Timer(*)()) >::value, "This should not fire!"); }</code>
이 프로그램은 성공적으로 컴파일되어 time_keeper가 함수에 대한 포인터를 인수로 사용함을 확인합니다.
결론적으로 "가장 성가신 구문 분석" 혼란은 Timer() 표현식이 다음과 같이 해석될 수 있다는 사실에서 비롯됩니다. Timer 유형의 객체이거나 Timer를 반환하는 함수에 대한 함수 포인터입니다. 올바른 해석은 표현이 사용되는 맥락에 따라 다릅니다.
위 내용은 \'Timer()\'는 함수인가요, 아니면 객체인가요? C 11의 \'가장 짜증나는 구문 분석\' 이해하기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!