这也是我在实务上无法想到用途的一个语法(也是知道它的意思 但还是不知道啥时该用)
https://en.cppreference.com/w/cpp/language/reference
2) auto&& except when deduced from a brace-enclosed initializer list:
这边写到
for (auto&& x: f()) {
// x is a forwarding reference; this is the safest way to use range for
loops
}
为什么说这是最safest的? 如果只是readonly 的话写const auto&不是更好?
另外是他写
auto&& z = {1, 2, 3}; // *not* a forwarding reference (special case for
initializer lists)
为什么说"不是"?
https://ideone.com/fYlKY4
这样验证感觉就一样啊? special在哪?
但看完还是不知道什么时候必须用auto&&
如果说
一个函数 Type Func();
我用auto&& temp = Func(); or auto temp = Func();
然后把它std::move(temp) 给其他函数
前者可能少一次move construct
但印象中有文章说 这样反而会让optimization 受限?
但其实实务上比较会写 const auto& temp = Func();
然后在copy给其他函数
这样写起来反而变成一定要用copy了? 这样有了move 是不是根本就不要加上const&
而是都用auto temp = Func(); 这样来反而好?
问题都是从
https://en.cppreference.com/w/cpp/utility/any/any_cast
我不知道要写auto temp = std::any_cast<....>(...); 还是加上&&
以上诸多盲点
谢谢