C 函式的返回型別宣告為乙個右值引用型別,會發生什麼事情?

時間 2021-05-31 05:13:29

1樓:Eric Qiang

很簡單,也就是乙個返回右值引用的函式出現在表示式中會有哪些「值型別」(value category)的轉換?

假設函式宣告為 int&& foo();

1. 當作右值,例如:

2+foo()

2. 當作左值,例如:

int& k=foo();

int&& L=foo(); //具名的右值引用實際上是左值引用。因此與上一行語句相同

int *p=&foo(); //可以用 「取位址&」運算子獲取記憶體位址

函式返回乙個右值引用,到底是個什麼東西呢?

C++把「值」細分為3類:左值(lvalue)、純右值(pure rvalue)、臨終值(xvalue)。右值引用是一類資料型別,用於引用具有臨終值的物件。

由臨終值的性質,它是可以轉化作右值來使用,也可以用 「取位址&」運算子獲取記憶體位址。

所以呢,函式返回乙個右值引用,與函式「按值返回」不是一碼事。函式「按值返回」這是乙個純右值,不能用 「取位址&」運算子獲取記憶體位址。

C 11中能否顯式宣告乙個lambda型別的變數,而不用auto

所以,不存在符合標準的 不利用編譯器內部實現特徵 的顯式宣告lambda型變數的方法,是這樣嗎?是。你可以寫個程式,用 typeid 列印出型別的名字看一下。include include template T void printType T obj intmain printType print...

c語言如何判斷乙個宣告到底是函式還是指標還是陣列還是什麼東西?

yuantj 從裡到外一步步看。設要求的型別為 T。第一步 找到識別符號名 T f第二步 注意到識別符號的左側有 符號,所以這是個指標 設被指型別為 F,則變成了 F f 第三步 識別符號的右側有 3 說明這是個含有 3 個指標的陣列 F f 3 第四步 外圍有函式指標的宣告,證明 F 是乙個函式型...

c 如何自定義乙個返回二維陣列的函式而不是首位址?

如果你說的是內建陣列,那是不可以的。但是,如果你願意可以使用C 11標準模板庫裡面的array,封裝成了模板類,提供了拷貝建構函式,可以直接返回乙個array。 旺旺 C 語言標準裡面倒是真寫了函式不能返回陣列,在 版標準裡沒看到相關論述,在 版標準裡面看到了,函式不能返回陣列,但可以返回對陣列的引...