>  기사  >  백엔드 개발  >  Timer()는 생성자 호출인가요, 아니면 함수 호출인가요? C의 \"가장 짜증나는 구문 분석\" 모호함

Timer()는 생성자 호출인가요, 아니면 함수 호출인가요? C의 \"가장 짜증나는 구문 분석\" 모호함

Susan Sarandon
Susan Sarandon원래의
2024-11-02 13:25:30854검색

Is `Timer()` a Constructor Call or a Function Call? The

"가장 짜증나는 구문 분석" 모호성: 균일한 초기화 풀기

C 영역에서는 "가장 짜증나는 구문 분석" 모호성이 발생할 수 있습니다. 다음 코드의 예시와 같이 균일한 초기화 프로그램을 만날 때:

<code class="cpp">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>

dv 해석

줄에서 auto dv = Timer();, dv 유형 Timer()의 해석에 달려 있습니다. 이는 다음 중 하나일 수 있습니다.

  • Timer 유형의 객체를 인스턴스화하는 생성자 호출.
  • 균일한 초기화를 사용할 수 있으므로 Timer의 가상 연산자() 오버로드에 대한 함수 호출

이 경우 생성자 호출을 의미하므로 dv는 Timer 유형의 객체가 됩니다. auto 키워드는 초기화 프로그램을 기반으로 유형을 추론합니다.

time_keeper 이해

int time_keeper(Timer()); 줄에는 time_keeper라는 함수가 선언되어 있습니다. 인수는 예상할 수 있듯이 Timer (*) () 유형의 함수 포인터가 아닙니다. 오히려 타이머를 반환하고 인수를 사용하지 않는 함수에 대한 포인터를 나타냅니다. 그 이유는 다음과 같습니다.

  • 함수는 인수로 전달될 때 암시적으로 함수에 대한 포인터로 붕괴됩니다.
  • 이 특정 인스턴스에서 함수 호출은 다음을 반환하는 함수에 대한 포인터로 붕괴됩니다. 타이머이며 인수를 사용하지 않습니다(예: Timer(*)().

결론적으로

"가장 성가신 구문 분석" 모호성은 혼란의 가능성을 강조합니다. C의 특정 구문을 해석할 때. 이러한 시나리오를 올바르게 이해하려면 균일한 초기화 및 함수 붕괴의 개념을 이해하는 것이 중요합니다.

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

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