오류: 임시 개체를 참조로 전달
C에서 임시 개체를 상수가 아닌 참조로 전달하려고 하면 컴파일 오류가 발생할 수 있습니다. . 이는 함수가 참조 매개변수를 예상하고 임시 객체로 호출될 때 발생합니다.
예를 들어 다음 코드를 고려해보세요.
class Foo { public: Foo(int x) {}; }; void ProcessFoo(Foo& foo) { } int main() { ProcessFoo(Foo(42)); return 0; }
이 코드는 다음과 같은 일부 컴파일러에서 성공적으로 컴파일됩니다. Visual Studio는 GCC와 같은 다른 항목에서는 오류로 인해 실패합니다. 오류 메시지는 일반적으로 rvalue 유형에서 const가 아닌 참조 매개변수의 잘못된 초기화를 나타냅니다.
해결 방법
이 문제를 해결하려면 세 가지 일반적인 해결 방법이 있습니다.
호출을 위한 임시 변수를 만듭니다. ProcessFoo:
Foo foo42(42); ProcessFoo(foo42);
ProcessFoo가 const 참조를 갖도록 설정:
void ProcessFoo(const Foo& foo) { }
ProcessFoo가 Foo를 수신하도록 허용: 값:
void ProcessFoo(Foo foo) { }
컴파일 오류 이유
C에서는 의미 없는 작업을 방지하기 위해 임시 개체를 비 const 참조에 전달하는 것을 금지합니다. const가 아닌 참조를 취하는 함수는 매개변수를 수정하고 이를 호출자에게 반환할 것으로 예상합니다. 임시 개체를 전달하면 수정 및 반환이 불가능하므로 이 목적이 무효화됩니다.
호환성 차이
원본 코드가 Visual Studio에서는 컴파일되지만 GCC에서는 컴파일되지 않는 이유는 다음과 같습니다. 아마도 컴파일러 구성의 차이 때문일 것입니다. Visual Studio에서는 최적화 또는 이전 버전과의 호환성을 위해 const가 아닌 참조에 임시를 전달할 수 있습니다. 그러나 최신 C 컴파일러는 GCC에서 구현된 대로 언어 의미 체계를 엄격하게 적용하는 것을 선호합니다.
위 내용은 C에서 임시 개체를 Non-Const 참조로 전달하면 컴파일 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!