具有整数文字的reinterpret_cast不是constexpr

时间:2019-01-13 14:22:01

标签: c++11 constexpr

以下代码无法在gccclang中进行编译。双方都抱怨reinterpret_castint*不是constexpr

如何解决该问题?请注意,我无法修改在第三方库(PORT)中定义的宏avr

#include <iostream>
#define PORT ((int *)(0x20))
constexpr int *p = PORT;  // does not compile

int main() {
    std::cout << (uintptr_t) p << "\n";
    return 0;
}

1 个答案:

答案 0 :(得分:1)

简单地说,如果您不能修改PORT,则不能将PORT指定为constexpr

constexpr表达式不能包含reinterpret_cast。这是未定义的行为。请记住,像(int*)这样的c样式强制转换为static_castreinterpret_cast,在这种情况下为reinterpret_cast

以您的示例为例,我不明白为什么您不只使用const

const int *p = PORT;