>백엔드 개발 >C++ >Visual Studio에서 임시에 대한 Non-Const 참조 바인딩을 허용하는 이유는 무엇입니까?

Visual Studio에서 임시에 대한 Non-Const 참조 바인딩을 허용하는 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-24 09:55:25867검색

Why Does Visual Studio Allow Non-Const Reference Binding to Temporaries?

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

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