我可以写一个非const结构的const成员吗?

时间:2017-02-05 20:18:06

标签: c language-lawyer standards

这段代码合法吗?:

#include <stdio.h>

typedef struct a_d{
    int const x;
} a_d;

int a_d__ctor(a_d *X)
{
    *(int*)&X->x = 42; //<-- legal or not?
    return 0;
}

int main()
{
    a_d a;
    a_d__ctor(&a);
    printf("a.x=%d\n", a.x);

}

1 个答案:

答案 0 :(得分:3)

使用const限定符声明的对象调用undefined behavior

根据标准(强调我的):

  

C11 6.7.3 / 6 类型限定符

     

如果尝试修改用a定义的对象   const-qualified类型通过使用非const限定的左值   类型,行为未定义。