gpt4 book ai didi

c++ - std::strings 的 std::initializer_list 的奇怪行为

转载 作者:可可西里 更新时间:2023-11-01 17:15:32 25 4
gpt4 key购买 nike

这个问题很可能已经有人问过了,但我没有找到答案。

下面的代码用 gcc 编译但在运行时崩溃,出现 std::length_error ( live )。

void test(const std::string &value) { std::cout << "string overload: " << value << std::endl; }

//void test(const std::vector<std::string> &) { std::cout << "vector overload" << std::endl; }

int main()
{
test({"one", "two"});
}

从字符串的初始值设定项列表创建字符串的能力似乎存在争议,例如,无法创建上面代码中注释掉的重载。

但即使允许这样的构造,为什么会导致失败呢?

最佳答案

它调用

string(const char* b, const char* e) 

字符串构造器重载。

它仅在 be 指向相同的字符串文字时有效。否则就是未定义的行为。

关于c++ - std::strings 的 std::initializer_list 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57725075/

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