我正在尝试编写如下形式的constexpr
函数:
constexpr int foo(bool cond) {
int a, b, c;
if (cond) {
a = 1;
b = 2;
c = 3;
}
else {
a = -1;
b = -2;
c = -3;
}
return a + b + c;
}
然而,编译器抱怨我使用的是未初始化的变量,尽管局部变量的最终初始化是有保证的。
我可以重写函数以使用三元运算符,即int a = cond ? 1 : -1;
等,但我不希望这样做。有没有办法让编译器相信局部变量会被初始化?
发布于 2017-01-06 23:59:52
@Borgleader方式就足够了:
constexpr int foo(bool cond) {
int a=0, b=0, c=0;
if (cond) {
a = 1;
b = 2;
c = 3;
}
else {
a = -1;
b = -2;
c = -3;
}
return a + b + c;
}
在C++11中编译时不会出错,并且只会警告constexpr函数中的变量声明是C++14扩展,并且在C++14模式下不会出现警告(使用CLang 3.4.1)
这是干净的,易于阅读和编写,并接近于原始代码。但毫无疑问,@Barry's solution更好。
https://stackoverflow.com/questions/41509106
复制相似问题