おはよう、
私はC++で新しいことを試していますが、Visual Studioのデバッグとリリースの設定が私に異なる結果をもたらしたケースが見つかりました。MSVC++不正なコードまたはコルーチンのコンパイルエラー
#include <experimental/generator>
#include <fstream>
#include <functional>
#include <iostream>
#include <string>
#include <vector>
template <typename T = std::string>
auto getLineByLine(std::string filename, std::function<T(std::string&)> func = [](std::string& var) { return var; })
{
std::ifstream infile(filename);
std::string line;
while (getline(infile, line))
{
yield func(line);
}
}
int main()
{
std::vector<std::string> myVector;
for (const auto& line : getLineByLine("fileWithMoreThanOneLine.txt"))
{
myVector.push_back(line);
}
std::cout << myVector[0] << std::endl;
}
このコードは、期待通りに出力されます。ファイルfileWithMoreThanOneLine.txtから1行です。
しかし、リリースでは、ベクトルの最初の文字列を印刷しているときに最後の行でクラッシュします。
私はそれをデバッグしようとしたとき、変数myVectorが "最適化されて利用できませんでした"ことがわかりました。リリースで。私はこれが正しい最適化ではないと思う。
for (const auto& line : getLineByLine("fileWithMoreThanOneLine.txt", [&myVector](std::string& var) { return var; }))
それは正しくコンパイル:
はまた、私は、私はこの1つの行を変更した場合ことがわかりました。しかし、変数myVectorはラムダ関数では必要ありません。
私のコードまたはMSVCコンパイラでこの問題はありますか?私はVS 2015 Update 1(コルーチンと最初のVS)とVS "15"をVC++の毎日のビルドで試しました。
は、
ミロスラフHrnčíř
P.S.をありがとう私の悪い英語には申し訳ありません。
「プログラム」とは何ですか? – SomeWittyUsername
また、あなたの現在のコードでは、絶対に 'myVector'に何もプッシュしないでください – Hayt
申し訳ありませんが、プログラムはmyVectorの元の名前です:( – CdTCzech