嘗試將臨時物件作為非常量引用傳遞時,例如以下程式碼中:
void ProcessFoo(Foo& foo) { } int main() { ProcessFoo(Foo(42)); // Error: Can't pass temporary object as reference }
g和clang 等編譯器會引發錯誤。發生這種情況是因為,根據設計,C 限制將臨時變數傳遞給 const 參考、值參數或右值參考。
此限制背後的基本原理是接收非 const 引用參數的函數打算修改這些參數並傳回它們給來電者。在這種情況下傳遞臨時值被認為是無意義的,並且可能表示錯誤。
要解決此問題,可以使用多種解決方法:
1。使用臨時變數
建立一個臨時變數並將其作為參數傳遞給函數:
Foo foo42(42); ProcessFoo(foo42);
2.使用const 引用參數聲明函數
修改函數宣告以接受const引用:
void ProcessFoo(const Foo& foo) { }
3.按值傳遞
允許函數以值接受物件:
void ProcessFoo(Foo foo) { }
由於編譯器實現限制較少,Visual Studio 允許使用此原始程式碼。
以上是為什麼我不能在 C 中將臨時物件作為非常量參考傳遞?的詳細內容。更多資訊請關注PHP中文網其他相關文章!