为什么丢弃const限定符不会导致任何警告?

时间:2019-01-17 22:36:35

标签: c const

"324".toIntOption.isDefined // true
"à32".toIntOption.isDefined // false
"024".toIntOption.isDefined // true

出于所有意图和目的,struct istruct { const int i; }; const int i = 1; struct istruct is = {1}; void *voidp_i = &i; // warning: discards 'const' qualifier void *voidp_is = &is; // no warning 似乎被解释为const限定类型。如果是这样,那么最后一行发出警告也就没有意义吗?

1 个答案:

答案 0 :(得分:2)

void *voidp_is = &is;

这里&is的类型为struct istruct *,没有const限定词,只有成员iconst。请注意,由于正在修改const,因此写入结构的((struct istruct *) voidp_is)->i=0;成员(例如const int)将导致未定义的行为。 (C2011,6.7.3 / 6)

void *voidp_i = &i;

在此示例中,&i类型为int const *const限定符在初始化时被丢弃。