以下のコードを参照してください。正しい出力は "10 20 30"ですが、リリースでは "0 0 0"が作成されます。なぜこれが起こるのですか?ラムダでのみ使用されているリリースビルドではローカルスタティック変数が初期化されていません
std::vector<int> inValues = {1, 2, 3};
std::vector<int> outValues(inValues.size());
static const int mag = 10;
std::transform(inValues.cbegin(), inValues.cend(), outValues.begin(),
[](const auto value){
return value * mag;
});
for (const auto value: outValues)
std::cout << value << " ";
変数が関数内のどこにも記述されている場合、またはグローバルスコープで宣言されている場合は、すべて正常に動作します。ラムダの変数をキャプチャする
私はあなたを考えた:あなたは
static
修飾子を維持する程度断固としている場合そうでない場合、あなたはちょうどそう、その値は、コンパイル時に離れて最適化されていない、それを定義した直後
mag
を使用することをふり静的変数を取得する必要はありませんか? – frslm@frslmあなたは大丈夫です。これはVisual Studioのバグです。イースターエッグを見つけるために+1してください。 –
clangツールセットを使用して構築しようとしましたが、完全に機能します。うん、そのバグ。 –