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

Declaring uninitialized variable which is initialized within a nested scope

本文关键字:初始化 变量 范围内 嵌套 声明      更新时间:2023-10-16

我有以下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;