가장 짜증나는 구문 분석: C 11의 모호성 풀기
C 11의 "가장 짜증나는 구문 분석" 모호성은 균일한 초기화 프로그램을 사용할 때 나타납니다. 다음 코드 조각에서 알 수 있듯이:
#include
class Timer
{
public:
Timer() {}
};
int main()
{
auto dv = Timer(); // Ambiguity: Object or function call?
int time_keeper(Timer()); // Ambiguity: Pointer or call?
return 0;
}
첫 번째 표현식 이해(auto dv = Timer())
첫 번째 표현식에서 auto 키워드는 dv 유형이 이니셜라이저에서 추론됨을 의미합니다. 등호(=) 오른쪽에 있습니다. 이니셜라이저는 인수 없이 Timer 객체를 반환하는 Timer 생성자를 호출하는 것입니다. 따라서 dv는 Timer 유형의 객체입니다.
두 번째 표현식 이해하기 (int time_keeper(Timer()))
두 번째 표현식에서는 다음과 같은 이유로 모호성이 발생합니다. 컴파일러는 Timer()가 함수 호출인지 또는 참조로 전달된 Timer 유형의 객체인지 확인할 수 없습니다.
그러나 왜냐하면 함수는 인수로 전달될 때 포인터로 붕괴됩니다. time_keeper의 실제 유형은 int(Timer(*)())이며, 이는 포인터-함수 해석을 위해 모호성을 해결합니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3