這也是我在實務上無法想到用途的一個語法(也是知道它的意思 但還是不知道啥時該用)
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<....>(...); 還是加上&&
以上諸多盲點
謝謝