hon*_*pei 11 c++ alignment static-cast reinterpret-cast
有人可以在http://en.cppreference.com/w/cpp/types/aligned_storage中解释关于铸造的一些代码吗?
可以使用以下代码
return *static_cast<const T*>(static_cast<const void*>(&data[pos]));
Run Code Online (Sandbox Code Playgroud)
被替换为
return *reinterpret_cast<const T*>(&data[pos]);
Run Code Online (Sandbox Code Playgroud)
?
为什么这里使用两个铸件?非常感谢.
香港
根据标准(第5.2.10 reinterpret_cast节,第7节):
指向对象的指针可以显式转换为指向不同对象类型的指针.当prvalue
v类型的"指针T1"被转换为类型"指针cv T2",结果是static_cast<cv T2*>(static_cast<cv void*>(v))如果两个T1和T2是标准布局类型和的对准要求T2并不比那些更严格T1.将"指向
T1"的类型的prvalue转换为"指向T2的指针"类型(其中T1和T2是对象类型,并且对齐要求T2不比那些更严格T1)并返回其原始类型,产生原始指针值.任何其他此类指针转换的结果都是未指定的.
所以,我们可以得出以下结论:
reinterpret_cast<*T>(ptr) 是有效的 static_cast<*T>(static_cast<void*>(ptr))static_cast<>(ptr)并不总是等于ptr,但reinterpret_cast<>(ptr)总是等于ptrreinterpret_cast安全使用