1
Visual Studio (2008) 및 g ++에서 코드를 컴파일하려고합니다.
vs2008에서는 성공했지만 g ++에서는 오류가보고되었습니다.
(추가하는 경우) const
,
test(const test &source):a(source.a) {}
g ++ 컴파일이 성공합니다.
test aa = 2;
은 임시 개체를 만들고 copy-constructor을 호출합니다.
임시 개체는 비 const 참조에 바인딩 할 수 없습니다.
그래서 vs2008이 컴파일 된 이유는 무엇입니까?약 vs/g ++ 복사 생성자
class test{
public:
test():a(1) {}
test(int num):a(num) {}
test(test &source):a(source.a) {}
private:
int a;
};
int main(){
test aa = 2;
return 0;
}
불행히도 경고는 없습니다./Za는 비표준 동작을 해제하지만/Za는 사용하지 않는 것이 좋습니다. –
@JamesMcNellis : 아, 당신 말이 맞아요.'/ Wall' (기본적으로 어쨌든 사용할 수 없습니다)도 있습니다. 'test aa = test (2); '로 경고하지만, 생성해야하는 것이지만, 그렇지 않은 경우도 있습니다. – GManNickG
@JamesMcNellis : 복사 생성자를 호출하지 않는 대신에'test (int num) '를 호출합니다. – skeu