我知道以下内容在标准中是明确允许的:
int n = 0;
char *ptr = (char *) &n;
cout << *ptr;
这个怎么样?
alignas(int) char storage[sizeof(int)];
int *ptr = (int *) &storage[0];
*ptr = 0;
cout << *ptr;
本质上,我的问题是关于别名规则是否允许通过指向其他类型的指针来访问一系列字符。如果可能的话,我希望能够引用标准中指示这方面的部分。
标准的某些部分让我感到矛盾;(3.10.10)似乎表明假设storage
的动态类型不是int
,那么它将是未定义行为。但是,动态类型的定义对我来说不清楚,并且std::aligned_storage
的存在会使我相信这是可能的。
aligned_storage
中的变量的方式进行访问。 - DarthRubik