c++ - 对象的 reinterpret_cast

标签 c++ casting compilation reinterpret-cast

采用这个结构:

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/

相关文章:

c++ - 从文本文件读取问题?

C++ multipule .cpp 文件错误 c2374

c++ - 使用 grep 命令一个 .hpp 文件获得匹配的二进制文件

python - 在 Python 中将大整数截断为 uint8 类型

python - 在 Linux 中,如何为不同版本的 Python 编译和安装代码?

linux - 运行 make 时显示 make ** no target.stop

c++ - 如何在 QML 函数异步的同时使用 QML 中的 QThread

java - 如何使用 Java 泛型避免不安全的强制转换警告

java - Java 中的类型转换,技术信息

C++:编译时检查匹配的函数调用对?