0

我有以下 C++ 片段

double exetime = 0;  
SVDRec R;
{
  timer<double> dummy{exetime};
  R = svdLAS2();
}
std::cout << exetime << std::endl;

其中的构造函数timer记录进入范围块的时间,其析构函数(在离开块时调用)计算传递的时间并将其存储在exetime. R仅在块内部初始化,并且没有默认构造函数,因此代码无法编译。但我不想初始化R为一些虚拟值。

这也不能编译:

double exetime = 0;  
SVDRec &&tmpR;
{
  timer<double> dummy{exetime};
  tmpR = svdLAS2();
}
SVDRec R = tmpR;
std::cout << exetime << std::endl;

我知道我可以使用指针,但我不想使用动态分配或 std::unique_ptr。有没有办法做到这一点?

4

1 回答 1

5

你可以试试:

double exetime = 0;  
SVDRec R = [&exetime]()
{
  timer<double> dummy{exetime};
  return svdLAS2();
}();

std::cout << exetime << std::endl;
于 2013-01-29T13:26:27.393 回答