防止表达式模板绑定到右值引用

Cli*_*ton 9 c++ temporary expression-templates ublas c++11

我理解做类似以下的事情:

auto&& x = Matrix1() + Matrix2() + Matrix3();
std::cout << x(2,3) << std::endl;
Run Code Online (Sandbox Code Playgroud)

如果矩阵运算使用表达式模板(例如boost::ublas),将导致静默运行时错误.

是否有任何设计表达式模板的方法来防止编译器编译可能导致在运行时使用过期临时值的代码?

(我尝试解决这个问题没有成功,尝试就在这里)

Nic*_*las 7

是否有任何设计表达式模板的方法来防止编译器编译可能导致在运行时使用过期临时值的代码?

不是.这在C++ 11的最终标准化之前得到了实际认可,但我不知道它是否曾被委员会通知.并不是说修复会很容易.我想最简单的事情是类型上的标志,如果auto试图推断它就会出错,但即使这样也会很复杂,因为decltype它也可以推导它,以及模板参数推导.并且所有这三个都以相同的方式定义,但您可能不希望后者失败.

只需适当地记录您的库,并希望没有人试图以这种方式捕获它们.