class MoveSemantic{
public:
// For inserting a value
MoveSemantic(short &value);
MoveSemantic(short &&value);
short &storedValue;
};
// Reference forced to initialize
MoveSemantic::MoveSemantic(short &value) : storedValue(value) {}
MoveSemantic::MoveSemantic(short &&value) : storedValue(value) {}
// Passing a RValue => Assiging to reference => Is this safe ?
MoveSemantic semantik(100);
cout << semantik.storedValue; // 100
我最近发现,可以通过滥用右值语义将临时值分配给类中的引用...但是为什么可能这样呢?记忆如何表现?
这是否会由于分配临时变量“ 100”而延长其寿命?这有多安全?临时值何时会被范围破坏?
可能是因为C ++不是安全的语言。它希望您知道自己在做什么。如果采用右值引用参数,则它希望您知道您在使用它做什么。如果将其存储为对象的引用成员,则它希望您可以确保所引用的对象只要该对象需要它就可以继续存在。
如果违反了这些期望,您将遭受后果。
右值引用不一定是“临时对象”。它可以是可以从其移动的任何对象的引用。这就是为什么std::move
退出的原因:通过向其返回右值引用来指定可以从非临时对象中移出。
是
100
,有,真的是一时?@Jeffrey:它将激发一个临时对象的创建。