從this thread很明顯,字符串文字不能用於返回常量字符串&的函數,因爲存在從const char *到std :: string的隱式轉換,從而創建臨時。返回引用臨時(內置類型)
既然這樣,爲什麼我得到一個警告「警告:返回引用到一個臨時」如果我的返回類型完全匹配,也沒有必要轉換,如:
include <iostream>
const int& test(){
return 2;
}
int main(){
std::cout << test();
}
發生不需要的隱式轉換關於2的返回值,爲什麼會有警告?我認爲使用測試()將幾乎是相同的做
const int& example = 2;
這是完全有效的。此外,如果我將2更改爲2.2(因此它是雙精度型),程序仍然運行(具有相同的警告),儘管事實上存在從double到int的轉換?如果有從double到int的轉換,我不應該遇到類似於const char *返回到字符串引用的問題嗎?
引用不能直接綁定到右值。相反,構造一個類型爲「int」的臨時對象(在'test'內部)並初始化爲2,並返回對該對象的引用。暫時在此刻被摧毀,導致參考懸而未決。 –
@Igor Tandetnik我明白了,謝謝。對我而言,我鏈接的線程使得它看起來像是隻有在發生隱式轉換時纔會遇到的問題。 – Silversonic
和它「有效」的「事實」,好吧,那只是UB。 –