声明在嵌套范围内初始化的未初始化变量

时间:2013-01-29 13:23:42

标签: c++ c++11

我有以下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。无论如何都有实现这个目标吗?

1 个答案:

答案 0 :(得分:5)

您可以尝试:

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

std::cout << exetime << std::endl;