采用这个结构:
struct Foo
{
float m_foo;
// no other member
};
// A Foo object.
Foo f;
哪个成本更高?
float result = std::sin(f.m_foo);
或
float result = std::sin(*(reinterpret_cast<float*>(&f)));
// f can be interpreted like float in this case
我认为第二种情况更快,但我不确定,因为我不知道编译器将如何处理它。你能告诉我什么吗?
最佳答案
Which is more costly?
IME,调用Undefined Behavior 的 IME 最终总是成本更高。
如果您想将其移植到某个新平台、另一个编译器或新版本的编译器,这样的代码可能会崩溃。或者它可能会使其他一些看起来无辜的代码爆炸。或者它可能只在星期天这样做,那时您的客户无法调用支持。 (然后他们会在星期一打电话,所以如果你写了这样的代码,你应该尽可能多地在星期一起飞。)或者它可能只在你的老板在身边,或者满月,或者编译器版本在这个月的第一天。
如果您有一些具体案例需要加速某些代码,并且您发现通过分析,认为这段代码是瓶颈,然后衡量这是否带来任何相关的性能优势,使用您的真实应用程序 和真实数据。如果是这样,那么以上帝的名义,在这个地方使用它,但是在那里放一些非常明显的评论,解释你做什么和为什么。
关于c++ - 对象的 reinterpret_cast,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12124994/