首頁 >後端開發 >C++ >為什麼我不能在 C 中將臨時物件作為非常量參考傳遞?

為什麼我不能在 C 中將臨時物件作為非常量參考傳遞?

Barbara Streisand
Barbara Streisand原創
2024-12-15 02:19:10287瀏覽

Why Can't I Pass a Temporary Object as a Non-Const Reference in C  ?

將臨時物件作為引用傳遞

嘗試將臨時物件作為非常量引用傳遞時,例如以下程式碼中:

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
上一篇:是`cout下一篇:是`cout