>백엔드 개발 >C++ >Visual Studio에서 임시 개체를 Non-Const 참조에 바인딩할 수 있나요?

Visual Studio에서 임시 개체를 Non-Const 참조에 바인딩할 수 있나요?

Patricia Arquette
Patricia Arquette원래의
2024-12-24 17:07:19660검색

Can Temporary Objects Be Bound to Non-Const References in Visual Studio?

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

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