Visual Studio의 비-상수 참조를 임시 개체에 바인딩하는 흥미로운 사례
비-상수 참조를 임시 개체에 바인딩하려는 Visual Studio의 행동으로 인해 겉보기에 모순되는 성격으로 인해 일부 프로그래머들 사이에서 눈썹이 생겼습니다. 컨텍스트를 이해하려면 다음 코드 조각을 고려하십시오.
class Zebra {int x;}; Zebra goo() {Zebra z; return z;} void foo(Zebra &x) { Zebra y; x = y; foo(goo()); }
놀랍게도 Visual Studio에서는 gcc가 이를 오류로 식별하는 동안 이 코드를 컴파일할 수 있습니다. 이러한 현상으로 인해 많은 사람들은 Visual Studio 접근 방식의 근거에 대해 궁금해했습니다.
자세히 살펴보면 Visual Studio가 이전 언어 확장을 사용하는 것으로 나타났습니다. Microsoft 버그 보고서는 Visual Studio가 임시 개체를 비 const 참조에 바인딩하는 것을 허용한다는 점을 강조하면서 이 문제를 조명합니다. 그러나 이 동작은 언어 확장을 비활성화하는 /Za 컴파일러 옵션을 사용하여 수정할 수 있습니다.
이 확장을 더 자세히 설명하려면 다음 코드를 고려하세요.
struct A {}; A f1(); void f2(A&); int main() { f2(f1()); // This line triggers an error with `/Za` enabled }
해결 방법 , Visual Studio는 이러한 경우에 대한 수준 4 경고를 지원하며, 이는 컴파일 중에 /W4를 지정하여 활성화할 수 있습니다. 그러나 이 접근 방식을 사용하면 여전히 코드를 컴파일할 수 있어 Visual Studio 확장의 유연성이 강조된다는 점은 주목할 가치가 있습니다.
위 내용은 Visual Studio에서 임시에 대한 Non-Const 참조 바인딩을 허용하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!