將臨時物件作為引用差異傳遞
在C 中,臨時物件只能傳遞給聲明為const、按值或聲明為const 的引用右值引用。此限制可防止無意中修改臨時變量,這通常會導致運行時錯誤。
編譯器錯誤
考慮以下程式碼:
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);
void ProcessFoo(const Foo& foo)
void ProcessFoo(Foo foo)
以值傳遞會將暫存值複製到函數中,並規避錯誤。
Visual Studio 與 g 在這種情況下,Visual Studio 的行為與 g 不同。 MSVC 允許將臨時值傳遞給非常量引用,這可能會引入微妙的運行時問題。這種行為與 g 形成鮮明對比,g 嚴格遵守 C 標準,禁止此類做法。以上是為什麼我不能將臨時物件傳遞給 C 中的非常量參考?的詳細內容。更多資訊請關注PHP中文網其他相關文章!