有一个全局变量,我不想让任何人,但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保持为零?上面是已清理的函数,但代码编译时没有任何警告。
答案 0 :(得分:1)
const_cast只有在您投射最初为非const的变量时才是安全的。