참조 불일치로 임시 개체 전달
C에서 임시 개체는 const, 값 또는 as로 선언된 참조에만 전달할 수 있습니다. rvalue 참조. 이 제한은 종종 런타임 오류로 이어지는 임시 수정을 방지합니다.
컴파일러 오류
다음 코드를 고려하세요.
class Foo { public: Foo(int x) {}; }; void ProcessFoo(Foo& foo) { } int main() { ProcessFoo(Foo(42)); return 0; }
Linux의 경우 Mac에서는 이 코드가 다음과 같이 컴파일되지 않습니다. 오류:
error: invalid initialization of non-const reference of type ‘Foo&’ from an rvalue of type ‘Foo’
이 오류는 임시 Foo 개체를 상수가 아닌 참조 매개변수에 전달하려는 시도에서 발생하며 C에서는 이를 금지합니다.
해결 방법
이 문제를 해결하려면 다음을 사용할 수 있습니다. 해결 방법:
Foo foo42(42); ProcessFoo(foo42);
여기서 임시 foo42 변수가 생성되어 참조로 전달됩니다.
void ProcessFoo(const Foo& foo)
이렇게 하면 const 한정자로 인해 임시 개체가 전달될 수 있습니다.
void ProcessFoo(Foo foo)
값을 전달하면 임시 값이 함수에 복사됩니다.
Visual Studio 대 g
이 경우 Visual Studio의 동작은 g와 다릅니다. MSVC에서는 const가 아닌 참조에 임시를 전달할 수 있으므로 잠재적으로 미묘한 런타임 문제가 발생할 수 있습니다. 이 동작은 C 표준을 엄격히 준수하여 이러한 관행을 금지하는 g 와 대조됩니다.
위 내용은 C에서 비 Const 참조에 임시 개체를 전달할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!