2017-10-23 14 views
2

나는 비주얼 C++ 17 컴파일러에서 다음과 같은 코드가 있습니다. 여기에 임시 Foo()를 반환하고 lvalue ref에 바인딩합니다. 그러나이 코드는 컴파일되고 실행도 잘됩니다. 왜 이것이 허용됩니까?Visual C++ 컴파일러가 왜 좌변 치 참조에 임시 할당을 허용합니까? 불법해야 lvalues에 임시직을 할당,</p> <pre><code>#include "stdafx.h" class Foo {}; Foo FuncBar() { return Foo(); } int main() { Foo &myFoo = FuncBar(); } </code></pre> <p>일반적으로 IIRC :

+1

마이크로 소프트는 그것을 허용하는 것이 좋다고 생각하기 때문에 ... 다른 대답이 없습니다. –

+0

@ M.M은 Microsoft가 어딘가에서 문서화 한 것입니까? –

+0

그들은 Xamarin이 좋은 아이디어라고 생각했기 때문에 신뢰성이 의심 스럽습니다 ... – DeiDei

답변

0

Microsoft C++ 확장 프로그램입니다./Za 플래그를 사용하여 컴파일을 실패하게 만들 수 있습니다.

+0

MS는/Za를 실제 코드에 사용하지 않는 것이 좋다고 들었습니다. 다른 여러 가지 일이 일어나지 않아야합니다. –

+0

Appereantly이 문서는 문제가 있지만 찾을 수 없습니다. 문서화 됨 : https://docs.microsoft.com/en-us/cpp/build/reference/microsoft-extensions-to-c-and-cpp –

+0

@ M. M windows.h는 더 이상 컴파일되지 않습니다. https://docs.microsoft.com/de-de/cpp/build/reference/za-ze-disable-language-extensions Microsoft는 휴대하려는 경우에만이 옵션을 사용하는 것이 좋습니다. – Jodocus