有一個類保持一個參考我希望下面的代碼失敗慘,但它編譯:爲什麼這個班舉行參考可複製?
#include <iostream>
struct ReferenceHolder
{
std::string& str;
ReferenceHolder(std::string& str)
: str(str)
{}
};
// Why does this compile?
ReferenceHolder f() {
std::string str = "Hello";
return ReferenceHolder(str);
}
int main() {
ReferenceHolder h = f();
std::cout << "Should be garbage: " << h.str << '\n';
return 0;
}
編譯器:克++ 4.7.2(與-std = C++ 11)
編輯:即使使用-fno-elide構造函數編譯也很愉快
顯然它正在移動。如果你明確地刪除移動構造函數,它不會編譯。 – jrok
@jrok的確如此,但據我所知,它既可複製又可移動。 – dyp
有趣的是,根據研磨機CPU(安全講座)的介紹,在這個體系結構中,你會遇到分段錯誤。 –