-1
#include <fstream>
#include <iostream>
class Bar { };
class Foo {
public:
Foo(Bar&) { }
};
int main()
{
Foo bar(Bar());
}
Bar()는 무엇을 반환하며 왜이 코드가 컴파일됩니까?생성자의 반환 값을 인수로 전달
#include <fstream>
#include <iostream>
class Bar { };
class Foo {
public:
Foo(Bar&) { }
};
int main()
{
Foo bar(Bar());
}
Bar()는 무엇을 반환하며 왜이 코드가 컴파일됩니까?생성자의 반환 값을 인수로 전달
실제로 아무 것도하지 않기 때문에 실제로는 Bar()
이 무엇을 반환해도 상관 없습니다! 문
Foo bar(Bar());
는 Foo
를 반환하고 인수를 복용하지 않는 기능을 소요하고 인수로 Bar
를 반환하는 기능 bar
를 선언 함수 선언이다. 이런 선언은 Most Vexing Parse으로 알려져 있습니다. 문을 가정
는 표현 Bar()
이 Bar
의 기본 생성자를 호출하여 유형 Bar
의 임시 객체를 생성 할
Foo bar{Bar()};
로 작성되었습니다. 물론
Bar()
에 의해 생성 된 임시를
Foo
의 생성자가 기대하는 비
const
왼쪽 값 참조에 바인딩 할 수 없기 때문에 코드가 컴파일되지 않습니다.
Foo bar {Bar)}; 비주얼 스튜디오 2014에서 잘 컴파일되었습니다. Visual Studio에 결함이 있습니까? –
"왜 이것을 컴파일합니까?" 'main'을'Foo bar ((Bar()));로 변경하면 원하는 동작을 가진 코드가 컴파일되지 않습니다 :-) – dasblinkenlight