0

次の C++ スニペットがあります

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

ここで、records のコンストラクターは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 に答える