gpt4 book ai didi

c++ - 如何在 GCC 中启用 C/C++ "Conditional with Omitted Operand"(又名 Elvis Operator "?:")

转载 作者:行者123 更新时间:2023-11-30 03:13:52 24 4
gpt4 key购买 nike

在谈Non-conforming C++从CppCon2019开始引入C++中的“Elvis Operator”,这是一个非标准的扩展,很多编译器都支持。

它通过省略 ?: 表达式的中间操作数来工作:

std::shared_ptr<foo> read();
std::shared_ptr<foo> default_value();

auto read_or_default()
{
return read() ?: default_value();
}

这正是取自 presentation 幻灯片 11 的示例.

然而,当我在 Ubuntu 18.04 上的 GCC 7.4.0 上构建它时,或者在 MinGW 上使用 GCC 8.2.0 构建它时,使用 -std=gnu++14 标志,我得到这个错误:

error: lvalue required as unary '&' operand
return read() ?: default_value();
^

在谈话中说这个扩展至少从 4.1.2 版开始出现在 GCC 中。

怎么了?

最佳答案

失败的不是基本的“省略操作数的条件”功能。它与 std::shared:ptr 的组合触发了 GCC 中的错误,已在 GCC 9.1 中修复。

以下代码自 GCC 4.1.2 起有效:

int read();
int default_value();

int read_or_default()
{
return read() ?: default_value();
}

关于c++ - 如何在 GCC 中启用 C/C++ "Conditional with Omitted Operand"(又名 Elvis Operator "?:"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58368012/

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