自動和表示式模板

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。