假设我定义了一个按值返回Eigen::MatrixXd
的函数,例如
Eigen::MatrixXd f(const Eigen::MatrixXd& in)
{
Eigen::MatrixXd tmp = in; // copy the input
// do something here with tmp
return tmp;
}
我然后使用
Eigen::MatrixXd A;
A = f(A);
据我了解,这里没有别名危险,因为f(A)
会返回一个临时值,然后被分配给A
。但是,大多数编译器都执行返回值优化(RVO),而临时编译器直接在A
中构建。在这种情况下,我可以在作业A = f(A);
中遇到麻烦吗?在我编写的代码中,事情似乎工作正常,但是我想知道这个任务是否确实是安全的。