当前位置:  开发笔记 > 编程语言 > 正文

GCC constexpr允许添加但不允许按位或带有地址

如何解决《GCCconstexpr允许添加但不允许按位或带有地址》经验,为你挑选了0个好方法。

考虑以下代码:

#include 

static int x = 0;

const uintptr_t arithmetic()
{
    static constexpr uintptr_t result = ((uintptr_t)&x) + 1u;
    return result;
}

const uintptr_t bitwise()
{
    static constexpr uintptr_t result = ((uintptr_t)&x) | 1u;
    return result;
}

GCC(所有版本4-9)都arithmetic()可以正常编译,但可以拒绝bitwise()

: In function 'const uintptr_t bitwise()':
:13:57: error: '(((uintptr_t)(& x)) | 1)' is not a constant expression
   13 |     static constexpr uintptr_t result = ((uintptr_t)&x) | 1u;
      |                                         ~~~~~~~~~~~~~~~~^~~~

为什么?请注意,在其他constexpr用例中,按位-或工作正常,但不是这种情况。

演示:https://godbolt.org/z/x5jbuU

推荐阅读
coco2冰冰
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有