다음 코드에서 리터럴을 사용하여 참조 변수를 초기화합니다.리터럴로 참조 멤버 변수 초기화
class ABC
{
public:
const int& a;
ABC():a(43) { }
void newfoo()
{
printf("NEWFOO %d",a);
}
};
int main()
{
ABC obj;
obj.newfoo();
}
이 프로그램의 출력은 나는 다음과 같은 코드가 잘 작동하는지 알고 비논리적 보인다 NEWFOO 32767
입니다.
int main()
{
const int& b=3;
printf("%d",b);
}
여기 무슨 일입니까? 컴파일러가 참조 변수의 초기화 중 일부 임시 변수를 선언하면 클래스가 전역 범위에 있기 때문에 main 변수의 범위가 아닌가?
멤버 참조를 리터럴로 초기화하지 마십시오. 나는 그것이 정의되지 않은 행동이라고 믿는다. –
왜 이렇게 표준화 되었습니까? 이것을 컴파일하게하는 것은 의미가 없습니다. –