1
常識是非常量引用不能綁定到臨時對象(不能延長其生存期)。問題是,下面的程序,甚至沒有一個警告編譯將非常量引用綁定到臨時對象 - 可能發生的示例
#include <iostream>
struct Type
{
int m;
Type b() {
Type ret = {1};
return ret;
}
Type& c() {
return *this;
}
};
int main()
{
Type a;
Type &obj = a.b().c(); // b() returns a temporary and c() a reference to that!
std::cout << obj.m << std::endl;
return 0;
}
B()返回一個臨時和c()的引用到! this怎麼可能?
PS:事實上,它比我輸出正確結果的事實編寫更多;完全可以理解的是,臨時使用的記憶在使用之前可能沒有受到傷害。
當然你可以:'extern int f(); int && r = f();' –
這是一個右值引用 –
那麼,右值引用也是引用。或者你是某種參照種族主義者? –