gpt4 book ai didi

c++ - MSVC++ 错误代码或协同程序编译错误

转载 作者:行者123 更新时间:2023-11-30 05:21:56 30 4
gpt4 key购买 nike

美好的一天,
我在 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; }))
它编译正确。但是 lambda 函数不需要变量 myVector,对吧?

这是我的代码或 MSVC 编译器的问题吗?我尝试了 VS 2015 Update 1(第一个带有协程的 VS)和 VS“15”以及每日构建的 VC++。

谢谢你,
米罗斯拉夫·赫恩奇日

附言很抱歉我的英语不好,如果这是个愚蠢的问题。

最佳答案

听起来像是你的文件路径有问题......你可能无法读取文件,导致 vector 未被填充,然后 vector [0] 超出范围。

VS 将发布版本和调试版本放在不同的目录中,这意味着您在使用调试版本运行时打开的文件不存在于您使用的相同相对路径中。

尝试用完整路径更新它,然后看看会发生什么

关于c++ - MSVC++ 错误代码或协同程序编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39870961/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com