gpt4 book ai didi

c++ - 此类代码中 gcc 和 clang 之间的不同行为

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:09:22 26 4
gpt4 key购买 nike

int main() 
{
std::vector<char> delimiters = { ",", ";" };
std::cout << delimiters[0];
}

我在 gcc 和 clang 之间得到不同的答案

clang7.0.0打印出来,

gcc8.2.0 报错

terminate called after throwing an instance of 'std::length_error' what(): cannot create std::vector larger than max_size()

Aborted

哪个编译器是正确的?

最佳答案

两个编译器都是正确的,因为你的代码有未定义的行为。

你掉进了陷阱。 { ",", ";"} 被翻译为 std::vector{const char*, const char*}。由于您有指针,这在语法上是有效的(因为它调用 vector 的迭代器构造函数),但是您使用的是两个不相关的字符串文字的地址,这是无效的,因为迭代器必须指向同一个容器。

你真正需要让它工作的是使用字 rune 字,而不是像初始化列表中的字符串文字

std::vector<char> delimiters = { ',', ';' }; 

关于c++ - 此类代码中 gcc 和 clang 之间的不同行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52745578/

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