0
Visual Studio 2010 컴파일러를 사용하고 있으며이 프로그램의 출력을 이해하려고합니다.C++ 함수는 파괴 후 유효한 '참조 용'객체를 반환합니다.
코드 :
#include <iostream>
using namespace std;
class A
{
public:
int i;
A()
{
i=0; cout<<"constructing A..\n";
}
A(int a): i(a)
{
cout<<"constructing A with argument\n";
}
A(A& a)
{
i=a.i;
cout<<"copy constructor\n";
}
~A()
{
cout<<"destructing a: " << i << endl;
}
};
A& f(A b)
{
return A(25);
}
void main()
{
A m;
cout << "i = " << f(m).i << endl;
}
출력 :
구성하는 ..
복사 생성자
인수
는 파괴한다와 구축 : 25
는 파괴한다 : 0
를 내가 = 25
destructing a : 0
내 이해에서 A (25)는 참조에 의해 반환 된 다음 파손되었으므로 왜 i : 'i = 25'값을 인쇄합니까?
얼굴에 정의되지 않은 동작입니다. 정의되지 않은 동작의 동작에 대해 묻는 것은 꽤 쓸모가 없습니다. –
종이에 무언가를 써서 쓰레기통에 던지면 몇 분 후에 한 번 보시면 메모가 그대로 남아 있습니다. 왜? 그 동안 아무도 당신 쓰레기통을 비우지 않았기 때문입니다. 그 종이에 아무 것도 중요하지 않은 것이 더 좋을 것입니다. 왜냐하면 당신이 나중에 보게되면 그 위에있을 수 있기 때문입니다. 누군가 다른 것으로 대체 할 수있었습니다. 정의되지 않은 동작을 이해하려고하면 시간이 낭비됩니다. – user463035818