오류: Visual Studio에서 비상수 참조가 임시로 바인딩되었습니다.
임시 개체를 비상수 개체에 할당할 때 GCC에서 오류가 발생합니다. 참조. 놀랍게도 Visual Studio에서는 이를 허용합니다. 불일치 이유는 무엇입니까?
설명은 Visual Studio의 이전 확장에 있습니다. 버그 보고서에 언급된 대로 "임시 개체는 비-상수 참조에 바인딩될 수 있습니다." Visual Studio에서는 정의되지 않은 동작이 발생할 수 있음에도 불구하고 임시 개체를 비상수 참조에 바인딩할 수 있습니다.
이것은 행동이 논란이 됐다. 버그 보고서에 대한 한 응답에서는 이 오류에 대한 레벨 4 경고가 있으며 "/W4" 컴파일러 플래그를 사용하여 활성화할 수 있다고 언급합니다.
그러나 Visual에서 이를 오류로 만드는 방법이 있습니다. Studio: "/Za" 플래그를 사용하여 언어 확장을 비활성화합니다. 이는 엄격한 C 표준을 준수하고 잠재적으로 문제가 있는 코드 동작을 방지하려는 경우 유용한 해결 방법입니다.
설명하려면 다음 예를 고려하세요.
class Zebra { int x; }; Zebra goo() { Zebra z; return z; } void foo(Zebra &x) { Zebra y; x = y; foo(goo()); // Error in GCC, allowed in Visual Studio }
Visual Studio에서 이 코드는 오류 없이 컴파일됩니다. 그러나 GCC에서는 임시 객체가 비 const 참조에 할당되어 컴파일 오류가 발생합니다.
위 내용은 Visual Studio에서는 왜 Const가 아닌 참조가 임시 개체에 바인딩되도록 허용하지만 GCC에서는 허용하지 않습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!