首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Clang在编译时不计算非constexpr变量的constexpr函数的值

Clang在编译时不计算非constexpr变量的constexpr函数的值
EN

Stack Overflow用户
提问于 2019-04-29 16:55:59
回答 2查看 365关注 0票数 5

下面是一些代码:

代码语言:javascript
复制
constexpr int sum(int a, int b) {
    return a + b;
}

int main() {
    int a = sum(4, 5);

    return 0;
}

我用clang-9编译了这段代码,但它在编译时不会计算main函数中int a的值。如果我使用constexpr int a,clang会在编译时计算它,但我不能在运行时更改这个变量。

但是gcc-7.1在编译时计算int a的值。

为什么会发生这种情况?如何修复它?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-29 17:08:39

constexpr说明符仅意味着可以在编译时计算函数的值。这并不意味着应该在编译时对其进行计算。因此,不同的编译器/版本在这方面具有灵活性。

如果您想在编译时强制执行这样的计算,那么分配给它的变量也应该是constexpr

aconstexpr int而不仅仅是一个普通的int时,就会发生这种情况。

要解决您的特定问题,您应该使用一个中间变量constexpr,然后将其值赋给一个可以更改的变量。

票数 5
EN

Stack Overflow用户

发布于 2019-04-29 17:06:51

如果您希望在编译时预先计算一个值,然后将其绑定到允许修改的标识符,则只能通过使用constexpr对象初始化非constexpr对象来强制执行此操作:

代码语言:javascript
复制
constexpr int init = sum(4, 5);
int a = init;
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55899941

复制
相关文章

相似问题

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