自動和表示式模板
auto
也可能導致表達模板發揮作用的問題:
auto mult(int c) {
return c * std::valarray<int>{1};
}
auto v = mult(3);
std::cout << v[0]; // some value that could be, but almost certainly is not, 3.
原因是 valarray
上的 operator*
為你提供了一個代理物件,它將 valarray
稱為懶惰評估的一種手段。通過使用 auto
,你將建立一個懸空參考。而不是 mult
已經返回了 std::valarray<int>
,那麼程式碼肯定會列印 3。