【发布时间】:2011-09-25 06:10:19
【问题描述】:
return *reinterpret_cast<UInt32*>((reinterpret_cast<char*>(this) + 2));
Struct 是 pragma packed 1 并且包含一堆 uint、char、short 字段...
既然是 UInt32,是不是应该先 reinterpret_cast 转为 unsigned char* 还是有关系?
另外,速度在这里很关键,我相信 reinterpret_cast 是最快的演员而不是 static_cast。
编辑:该结构实际上由两个单字节字段组成,后跟大约 16 个其他结构的联合,其中 15 个将 UInt32 作为其第一个字段。我快速检查它不是没有的,然后对 2 字节偏移量执行 reinterpret_cast。
【问题讨论】:
-
我相信
reinterpret_cast比static_cast慢。 -
@Nawaz 该声明有任何引用吗?
-
@Nawaz:真的吗?似乎不太可能..
-
你从哪里得到
2?如果它是一个变量,包含结构的Uint32成员的已知偏移量,但根据某些运行时属性,它在运行时将是不同的成员,那么也许您可以使用指向成员的指针。如果您正在阅读一些 ASN.1 风格的不同数据的混合,它会告诉您自身各个位的偏移量,那么获取 4 字节整数的可移植方式是一次一个字节,移位和 ORing。如果你想要“快速”,你需要做一些特定于实现的事情。UInt32看起来像 Windows,但谁知道呢。 -
@MSalters:对优化器没有影响。演员表基本上告诉编译器信任用户。在那之后,类型由用户指定,编译器/优化器不在乎你是否犯了错误。
标签: c++ casting struct reinterpret-cast