>백엔드 개발 >C++ >다른 컴파일러에서는 그렇지 않은 반면 Visual Studio에서는 임시에 대한 상수가 아닌 참조를 컴파일하는 이유는 무엇입니까?

다른 컴파일러에서는 그렇지 않은 반면 Visual Studio에서는 임시에 대한 상수가 아닌 참조를 컴파일하는 이유는 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-25 20:24:13181검색

Why Does Visual Studio Compile Non-Constant References to Temporaries While Other Compilers Don't?

임시로 바인딩된 비상수 참조: 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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