在这种情况下会发生什么?将一个右值赋给'const auto'时会发生什么
// assume WeakPtr is valid and has not expired
const auto& something = WeakPtr.lock();
something->doStuff();
这是undefined?
它在这种情况下会改变吗?
std::shared_ptr<Something> getSomething() { return mSomething.lock(); }
const auto& something = getSomething();
这又怎么样?
std::vector<int> getInts() { return std::vector<int>{ 1, 2, 3 }; }
const auto& ints = getInts();
在每种情况下const auto&
意味着我要绑定到的对象的引用,但在每一种情况下,我将它绑定到一个临时右值对象。我是否在邀请灾难?
整洁如何问题像这样聚集起来:http://stackoverflow.com/questions/42868517/why-can-you-intialize-a-const-reference-but-not-a-non-const-reference -from-an-rv一些有用的评论关于什么和什么因素。 – user4581301
重要的是要注意“临时”和“右值”之间的区别。后者是严格更一般的。例如,比较'const int&r = 5;'和'const int&q = std :: move(5);'。两者都是rvalues,一个是灾难。 –