自动和表达式模板
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。