Luc*_*ima 0 c++ casting compilation reinterpret-cast
采用这种结构:
struct Foo
{
float m_foo;
// no other member
};
// A Foo object.
Foo f;
Run Code Online (Sandbox Code Playgroud)
哪个更贵?
float result = std::sin(f.m_foo);
Run Code Online (Sandbox Code Playgroud)
要么
float result = std::sin(*(reinterpret_cast<float*>(&f)));
// f can be interpreted like float in this case
Run Code Online (Sandbox Code Playgroud)
我认为第二种情况更快,但我不确定,因为我不知道编译器将如何处理它.你能告诉我什么吗?
哪个更贵?
IME,调用未定义行为的人最终总是更加昂贵.
如果要将其移植到某个新平台,或其他编译器或新版本的编译器,此类代码可能会爆炸.或者它可能使一些其他的,无辜的代码爆炸.或者它可能只在星期天,当您的客户无法拨打支持时这样做.(他们会在星期一打电话,所以如果你写这样的代码,你应该尽可能经常在星期一起飞.)或者它可能只在你的老板在周围,或满月时,或在建立在本月的第一天.
如果你有一些具体的例子,你需要加快一些代码,你发现,通过分析,认为这段代码是一个瓶颈,然后测量这是否带来任何相关的性能优势,使用您的实际应用和实际数据.如果确实如此,那么以上帝的名义在这个地方使用它,但在那里放一些非常明显的评论,解释你做了什么以及为什么.