gpt4 book ai didi

c++ - 将 initializer_list 插入 vector 时 VS2013 SP5 崩溃

转载 作者:太空狗 更新时间:2023-10-29 23:13:49 24 4
gpt4 key购买 nike

看到以下代码发生崩溃。我知道 initialize_lists 在 VS 中名声不佳,但我认为其中大部分已在 2013 sp3 中修复。相同的代码在 g++ (6.1) 中运行良好。我在这里错过了什么吗?这似乎太简单了。

调试器提示 xstring 模块中的无效迭代器存在问题。相同的代码适用于整数查找,所以我猜它与某种特定于字符串的优化有关。

#include <vector>
#include <iostream>
#include <string>

int main(int argc, char** argv)
{
std::vector<std::string> x = {"a","b","c","d"};

for(auto i : x)
std::cout << i << ":";
std::cout << std::endl;

x.insert(x.end(), {"e","f"}); // Crash here

for(auto i : x)
std::cout << i << ":";
std::cout << std::endl;

return 0;
}

最佳答案

如果您尝试插入 3 个元素,例如 x.insert(x.end(), {"e","f", "g"});,您会感到惊讶。没有崩溃,对吧!

这是 MSVC 2013 中的一个错误,似乎已在 MSVC 2015 中修复。这里有一个解释,以阐明问题发生的位置。如果您尝试只声明 std::string a{ "a", "b"};,您会发现它编译正常,但会导致崩溃。如果你再添加一个元素,那么它根本不会编译。因此,insert 会调用 string 构造函数,而不是调用 vector 构造函数。

关于c++ - 将 initializer_list 插入 vector<string> 时 VS2013 SP5 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37062172/

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