使用三元操作符从函数返回统一初始化
Uniform initialization with ternary operator return from function
我不知道这是编译器错误(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;
}
大括号本身不构成表达式(尽管初始化列表中的元素都是表达式)。带括号的init-list只是一个语言结构,可用于在c++ 11标准第8.5.4节指定的上下文中进行初始化(包括return
语句)。
如果你想编译你的return
语句,并且仍然使用三元操作符和的列表初始化,你必须这样重写它:
return { i == 3 ? i + 2 : i };
但是,请注意,上述内容不是必需的。正如David Rodriguez(评论中的dribeas)所提到的,你可以放弃使用列表初始化。这也同样有效:
return i == 3 ? i + 2 : i;
相关文章:
- 从函数返回const char*数组
- 检查函数返回类型是否与STL容器类型值相同
- 从 c 或 cpp 系列子函数返回到主函数
- 从函数返回任意简单类型的数据
- 警告:在函数返回类型 [-Wignore 限定符] 时忽略类型限定符
- 从 C++ 中的函数返回数组地址问题
- VirtDisk.h QueryChangesVirtualDisk() 函数返回 RangeCount 为 0
- 为什么glGetSubroutineIndex为不同的函数返回相同的值?
- 在 c++ 中将函数返回类型指定为模板参数
- 从封装在对象中的函数 C++ 返回时为空的列表
- 为什么向量内部的指针在从函数返回时会发生变化?
- 函数返回的 rvalue 引用(表达式)是 xvalue - 但没有标识?
- 程序中的布尔函数返回输入的范围无论如何都是无效的
- 寿命延长从函数返回引用
- 程序不向函数返回值
- 字符串函数返回奇怪的值
- 类的大问题,以及从空函数c++返回
- 为什么在尝试测量函数返回所需的时间时,我的运行时编号是错误的?
- C++二叉搜索树模板从函数返回节点
- NVCC 错误:string_view.h:constexpr 函数返回是非常量