使用constexpr引用会导致多个定义错误

时间:2013-03-08 10:30:10

标签: c++ c++11 constexpr

我使用基于gcc 4.7.2的CodeSourcery g ++ lite为MCU编程
我想定义位于特定地址的外围对象。所以我尝试使用constexpr说明符引用。

例如:

typedef int& int_ref;
constexpr int_ref i = *(int*)0;

如果我将该代码放入标题中并编译我的程序,我将得到如下诊断:

xx1.o:(.rodata.i+0x0): multiple definition of `i'
...
xxx.o:(.rodata.i+0x0): first defined here
collect2.exe: error: ld returned 1 exit status

让我感到困惑,因为constexpr int i = 5对编译器非常满意。

当然还有其他解决方案:
1.宏,#define i *(int*)0,它会污染包含标题的每个.c / .cpp文件。目前,我正在使用宏。
2.静态对象static constexpr int_ref i = *(int*)0;。如果没有一些编译器选项(-fdata-sections),编译器就无法消除未使用的对象,然后会浪费大量空间。

有没有更好的方法呢?

0 个答案:

没有答案