gpt4 book ai didi

c++ - 在 C++ 三元运算符中使用字符串常量是对非左值数组的无效使用吗?

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

我的代码使用三元运算符检查条件,然后返回指向 C 字符串常量的指针或抛出异常。

奇怪的是,只有当我从三元运算符的一个路径throw 时,编译才会失败。如果我在两边都放一个字符串常量,一切都会编译。

// this line gives no compilation error
auto str = condition ? "foo" : "bar";

// this line gives "error: invalid use of non-lvalue array"
auto str = condition ? "foo" : throw std::runtime_error{"bad"};

这个问题已经开始出现在 gcc 9.1 中。多年来,我一直使用具有上述两种模式的行,它们在 clang 和早期版本的 gcc 中编译时没有警告。

上面的模式实际上是无效的,还是 gcc 9.1 中的编译器错误?

最佳答案

你是对的。如果另一个操作数是抛出表达式,则三元运算符传播一个操作数的类型和值类别。条件表达式是 const char[4] 类型的左值。 auto 然后推导出 const char*。这里没有“非左值数组的无效使用”。

此外,代码编译 fine clang 。我会说这是 GCC 的一个错误。

关于c++ - 在 C++ 三元运算符中使用字符串常量是对非左值数组的无效使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56828696/

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