在C ++中为const变量赋值

时间:2015-05-28 15:37:23

标签: c++

有一个全局变量,我不想让任何人,但ISR函数,要更改,变量是g_epoch,所以请看下面的代码:

#include <stdint.h>

volatile const uint32_t g_epoch = 0;

void adc_ISR() {
        static uint32_t epoch = 0;

        ++epoch;

        *(const_cast<uint32_t*>(&g_epoch)) = epoch;  // Expecting g_epoch to change

        printf("g_epoch adr: %x, const_casted adr: %x, epoch: %x, g_epoch: %x\n",
            (uint32_t)(&g_epoch),
            (const_cast<uint32_t*>(&g_epoch))),
            epoch,
            g_epoch);
}

输出为:g_epoch adr: ACF8, const_casted adr: ACF8, epoch: 28, g_epoch: 0,为什么g_epoch保持为零?上面是已清理的函数,但代码编译时没有任何警告。

编辑:基于注释,变量被放入ROM区域,因此无法更改,谢谢zneak。但看起来我可以通过使用编译指示并将变量强制转换为RAM来使其工作,但由于Alessandro Pezzato的回答,我不会,因为行为未定义。

1 个答案:

答案 0 :(得分:1)

const_cast只有在您投射最初为非const的变量时才是安全的。