Добрый день,
Я пробую новые вещи в C++, и я нашел случай, когда конфигурации Debug и Release в 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;
}
Этот код в Debug выходов, как и ожидалось - одна строка из файла fileWithMoreThanOneLine.txt.
Но в выпуске он падает на последней строке, когда я печатаю первую строку в векторе.
Когда я попытался отладить его, я обнаружил, что переменная myVector была «оптимизирована и недоступна». в выпуске. Я думаю, что это неправильная оптимизация.
Кроме того, я обнаружил, что если я изменить одну строку в этом:
for (const auto& line : getLineByLine("fileWithMoreThanOneLine.txt", [&myVector](std::string& var) { return var; }))
компилирует правильно. Но переменная myVector не нужна в лямбда-функции, правильно?
Является ли эта проблема с моим кодом или компилятором MSVC? Я пробовал VS 2015 Update 1 (первый VS с сопрограммами) и VS «15» с ежедневной сборкой VC++.
Спасибо,
Мирослав Hrnčíř
P.S. Прошу прощения за мой плохой английский, и если это глупый вопрос.
Что такое '' '' '' '' '' '' '' '' '' '' '' '' '' ' – SomeWittyUsername
, а также в вашем текущем коде вы никогда не нажимаете ничего на 'myVector' – Hayt
О, извините, программа оригинальное имя для myVector :( – CdTCzech