我有以下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。无论如何都有实现这个目标吗?
答案 0 :(得分:5)
您可以尝试:
double exetime = 0;
SVDRec R = [&exetime]()
{
timer<double> dummy{exetime};
return svdLAS2();
}();
std::cout << exetime << std::endl;