错误代码或协程编译错误
MSVC++ Bad code or compile error with coroutines
大家好,
我正在尝试c++中的新事物,我发现在Visual Studio中的调试和发布配置给了我不同的结果。
#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文件中的一行。
但是在Release中,当我在vector中打印第一个字符串时,它在最后一行崩溃了。
当我试图调试它时,我发现变量myVector在发布中"被优化掉了,不可用"。我认为这不是正确的优化。
我还发现,如果我把一行改成这样:for (const auto& line : getLineByLine("fileWithMoreThanOneLine.txt", [&myVector](std::string& var) { return var; }))
它可以正确编译。但是变量myVector在lambda函数中是不需要的,对吧?
是我的代码或MSVC编译器的问题?我尝试了VS 2015 Update 1(第一个带有协程的VS)和VS"15",每天构建vc++。
谢谢你,
Miroslav Hrnč我ř
注:我很抱歉我的英语不好,如果这是一个愚蠢的问题。
听起来像是文件路径的问题…您可能无法读取文件,导致vector未被填充,然后vector[0]超出了范围。
VS将发布版本和调试版本放在不同的目录中,这意味着当你运行调试版本时打开的文件不存在于你使用的相同的相对路径下。
尝试使用完整路径更新它,然后看看会发生什么
相关文章:
- std::is_base_of表示ctor编译错误
- Qt5:使用QCommandLineParser类时出现奇怪的编译错误
- 如何修复sfml c++代码编译错误
- 使用 MATLAB 编码器生成C++代码:编译错误"undefined reference to `rgb2gray_tbb_real64'"
- 使用外部SDK工具链文件在VisualStudio上生成项目编译错误
- vscode下的Arduino代码出现意外编译错误
- 第三方 API 中的编译错误 - Visual Studio
- std::cout输出int时出现编译错误
- 奇怪的代码抛出编译错误模板< J,int aSize=10> C2143:语法错误:在"<"之前缺少";"
- 提升图广度优先搜索前置编译错误
- C++ 中的编译错误:未定义对"主"的引用 collect2:错误:ld 返回 1 个退出状态
- 使用带有 ref 参数的成员函数创建线程时出现编译错误
- 我在C++中遇到了这个奇怪的编译错误
- 在C++中使用 Catch 测试框架编译错误"error: expected ';' at end of declaration list"
- 使用 std::enable_if 限制派生类的模板参数时出现编译错误
- 现代OpenGL和GLEW Libraray的编译错误
- C++ 编译错误:意外的类型名称"字符串":预期的表达式
- C ++程序编译错误,找不到/访问文件
- 使用直接大括号初始化时,C++ 编译错误"声明末尾的预期";"
- 为什么传递非静态成员函数会导致编译错误?