我有以下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。反正有实现这个目标的方法吗?

最佳答案

你可以试试:

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

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

关于c++ - 声明在嵌套范围内初始化的未初始化变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14583980/

10-10 07:11