簡體   English   中英

對象的reinterpret_cast

[英]reinterpret_cast of an object

采取這個結構:

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

我認為第二種情況更快,但是我不確定,因為我不知道編譯器將如何處理它。 您能告訴我些什么?

哪個更昂貴?

IME,最終導致調用Undefined Behavior的代價更高。

如果要將其移植到某個新平台,另一個編譯器或新版本的編譯器,則此類代碼可能會崩潰 否則可能會使其他看起來很天真的代碼崩潰。 或者它可能僅在周日(客戶無法致電支持人員時)這樣做。 (他們會在星期一打電話,所以如果您編寫這樣的代碼,您應該在星期一盡可能多地起飛。)否則,只有在您的老板在周圍或滿月時,或在編譯器上構建的編譯器版本時,才可能這樣做。這個月的第一天。

如果您有需要加速某些代碼的具體情況 ,並且通過分析發現這部分代碼是瓶頸,那么請使用您的真實應用程序和真實數據 衡量這是否帶來任何相關的性能優勢 如果這樣做了,那么就以上帝的名義在這一地方使用它,但在此處添加一些非常明顯的注釋,解釋您的工作及其原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM