以下代码无法在gcc
和clang
中进行编译。双方都抱怨reinterpret_cast
至int*
不是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;
}
答案 0 :(得分:1)
简单地说,如果您不能修改PORT
,则不能将PORT
指定为constexpr
。
constexpr
表达式不能包含reinterpret_cast
。这是未定义的行为。请记住,像(int*)
这样的c样式强制转换为static_cast
或reinterpret_cast
,在这种情况下为reinterpret_cast
。
以您的示例为例,我不明白为什么您不只使用const
。
const int *p = PORT;