首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >具有延迟的局部变量初始化的常量表达式函数

具有延迟的局部变量初始化的常量表达式函数
EN

Stack Overflow用户
提问于 2017-01-06 23:44:09
回答 1查看 2.6K关注 0票数 20

我正在尝试编写如下形式的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;等,但我不希望这样做。有没有办法让编译器相信局部变量会被初始化?

EN

回答 1

Stack Overflow用户

发布于 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更好。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41509106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档