>  기사  >  백엔드 개발  >  가장 짜증나는 구문 분석: Timer() - 객체 호출인가, 함수 호출인가?

가장 짜증나는 구문 분석: Timer() - 객체 호출인가, 함수 호출인가?

Patricia Arquette
Patricia Arquette원래의
2024-10-31 18:09:01201검색

The Most Vexing Parse: Timer() - Object or Function Call?

가장 짜증나는 구문 분석: 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 유형의 객체인지 확인할 수 없습니다.

  • Timer()가 함수 호출인 경우 int time_keeper(Timer())는 Timer 객체를 입력으로 사용하고 int를 반환하는 time_keeper라는 함수.
  • Timer()가 Timer 유형의 객체인 경우 int time_keeper(Timer())는 포인터를 사용하는 time_keeper라는 함수를 선언합니다. Timer 객체를 입력으로 사용하고 int를 반환합니다.

그러나 함수가 인수로 전달되면 포인터로 변하기 때문에 time_keeper의 실제 유형은 int(Timer(*)())입니다. 포인터-함수 해석을 선호하는 모호함.

위 내용은 가장 짜증나는 구문 분석: Timer() - 객체 호출인가, 함수 호출인가?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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