gpt4 book ai didi

c++ - 使用三元运算符从函数返回的统一初始化

转载 作者:搜寻专家 更新时间:2023-10-31 01:09:47 25 4
gpt4 key购买 nike

我不知道这是编译器错误(Arch Linux 上的 gcc 4.8)还是标准问题,但下面的代码无法编译。为什么允许 getFoo1 而不允许 getFoo2?

struct Foo {
int _i;
Foo(int i):_i(i) { }
};

Foo getFoo1(int i) {
if(i == 3) {
return { i + 2 };
} else {
return { i };
}
}

Foo getFoo2(int i) {
return i == 3 ? { i + 2 } : { i };
}

int main() {
auto foo1 = getFoo1(3); //fine
auto foo2 = getFoo2(3); //oops
return 0;
}

最佳答案

大括号本身 不构成表达式(尽管初始化列表的所有元素 都是表达式)。 braced-init-list 只是一种语言构造,可用于在 C++11 标准的第 8.5.4 节指定的上下文中进行初始化(包括 return声明)。

如果你想让你的return语句编译并且仍然使用列表初始化的三元运算符,你必须这样重写它:

return { i == 3 ? i + 2 : i };

但是请注意,以上内容不是必需的。 As mentioned by David Rodriguez - dribeas in the comments ), 你可以放弃使用列表初始化。这同样有效:

return i == 3 ? i + 2 : i;

关于c++ - 使用三元运算符从函数返回的统一初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16636709/

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