Visual Studio에서 임시 개체가 비상수 참조에 바인딩됨
임시 개체가 비상수 참조에 바인딩될 수 있는지 여부에 대한 문제가 발생했습니다. 특히 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()); }
놀랍게도 Visual Studio에서는 다음을 허용합니다. 오류 없이 컴파일하려면 이 코드를 사용하세요. 그러나 gcc는 이를 컴파일 타임 오류로 처리합니다. 이러한 불일치로 인해 임시 개체를 const가 아닌 참조에 바인딩하는 것이 유효한지 의문이 제기됩니다.
이 문제를 해결하기 위해 Microsoft는 컴파일러에 임시 개체를 바인딩할 수 있는 확장 기능을 도입했다는 점에 유의하는 것이 중요합니다. 비 const 참조. 이 동작은 이러한 바인딩을 금지하는 C 표준에 위배됩니다.
Microsoft 버그 보고서 "임시 개체는 비-상수 참조에 바인딩될 수 있음"은 이 동작에 대한 추가 정보를 제공합니다. 이 확장은 Visual Studio에서 기본적으로 활성화되는 표준에 대한 예외라고 명시되어 있습니다.
그러나 버그 보고서에서는 언어 확장을 비활성화하는 "/Za" 컴파일러 옵션을 사용하면 C 표준에 따라 코드가 컴파일에 실패합니다. 이는 이 경우 Visual Studio의 동작이 의도적으로 표준에서 벗어난 것임을 나타냅니다.
따라서 Visual Studio에서는 임시 개체를 비const 참조에 바인딩할 수 있지만 이는 C 표준에서 벗어난 확장입니다. . 표준을 엄격하게 준수하는 컴파일러는 이러한 코드를 만날 때 오류를 생성합니다. 예상치 못한 동작이나 이식성 문제가 발생할 수 있으므로 이 확장 프로그램을 사용할 때는 주의하는 것이 좋습니다.
위 내용은 Visual Studio에서 임시 개체를 Non-Const 참조에 바인딩할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!