【发布时间】:2016-01-19 14:51:27
【问题描述】:
让我们考虑以下代码:
struct Blob {
double x, y, z;
} blob;
char* s = reinterpret_cast<char*>(&blob);
s[2] = 'A';
假设 sizeof(double) 为 8,这段代码会触发未定义的行为吗?
【问题讨论】:
-
如果没有强制转换,这甚至无法编译。
-
这是C吗?在 C++ 中,这不会编译。
-
这不是合法的 C 或 C++,你需要一个演员表。一旦你有了演员表,这是合法的并且定义明确的。当然,如果您之后尝试访问 blob.x,任何事情都可能发生。
-
@Bathsheba,添加了演员,问题仍然存在。
-
@NicolBolas s[2] = *(s+2)
标签: c++ language-lawyer type-punning char-pointer