임시로 바인딩된 비상수 참조: Visual Studio 예외
이 문제는 상수가 아닌 참조를 바인딩하려고 시도하는 코드를 컴파일할 때 발생합니다. 임시 개체에. Visual Studio에서는 이러한 코드의 컴파일을 허용하지만 gcc와 같은 다른 컴파일러에서는 이를 컴파일 오류로 식별합니다.
설명
제공된 예에서:
class Zebra {int x;}; Zebra goo() {Zebra z; return z;} void foo(Zebra &x) { Zebra y; x = y; foo(goo()); }
코드는 함수에서 반환된 임시 개체에 상수가 아닌 참조(Zebra &x)를 바인딩하려고 시도합니다. 찐득찐득한 것(). C 표준에 따르면 이로 인해 컴파일 오류가 발생합니다.
Visual Studio 확장
그러나 Visual Studio에는 이 동작을 허용하는 이전 확장이 있습니다. 이 확장은 기본적으로 임시 개체에 대한 참조를 비임시 개체에 대한 참조인 것처럼 처리합니다.
이 확장은 레거시 코드 기반을 지원하기 위해 도입되었습니다. 그러나 예기치 않은 동작이 발생할 수 있으므로 일반적으로 권장되지 않습니다.
권장 접근 방식
이러한 예외를 방지하려면 /Za를 사용하여 확장 프로그램을 비활성화하는 것이 가장 좋습니다. 컴파일러 플래그. 이렇게 하면 코드가 C 표준을 준수하고 다양한 컴파일러에서 일관되게 처리됩니다.
위 내용은 다른 컴파일러에서는 그렇지 않은 반면 Visual Studio에서는 임시에 대한 상수가 아닌 참조를 컴파일하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!