>백엔드 개발 >C++ >Visual Studio에서는 왜 Const가 아닌 참조가 임시 개체에 바인딩되도록 허용하지만 GCC에서는 허용하지 않습니까?

Visual Studio에서는 왜 Const가 아닌 참조가 임시 개체에 바인딩되도록 허용하지만 GCC에서는 허용하지 않습니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-22 19:58:10766검색

Why Does Visual Studio Allow Non-Const References to Bind to Temporary Objects While GCC Doesn't?

오류: 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.