#include <cstdio>
class A
{
public:
A(int){puts("3");};
int foo(){puts("4");return 10;}
};
int main()
{
A a(a.foo());
return 0;
}
출력 4와 3멤버 함수를 생성자의 정의되지 않은 동작에 대한 인수로 사용하고 있습니까?
이 생성자를 호출하기 전에 멤버 함수를 호출합니다. 행동은 표준에 의해 정의됩니까?
예, 이것은 정의되지 않은 동작입니다. 아직 초기화되지 않은 변수에 대해 멤버 함수를 호출하고 있습니다. – Mankarse
'A * bar = NULL;''bar-> foo();'도 작동합니다 .. 아시다시피. 그래도 정의되지 않았습니다. 나는 또한 다음과 같은 것을 시도했다 :'char buffer [256]; A * bar = (A *) & 버퍼 [0]; bar-> foo();'역시 작동합니다 .. 아직 정의되지 않았습니다. – Brandon
왜 이것이 허용되는 것입니까? 선언이 끝나기 전에 어떻게'a'에 접근 할 수 있습니까? – Irfy