[英]should I use it or static_cast<void*> then static_cast<myType*> to avoid reinterpret_cast?
[英]Should I really use static_cast every single time I want to convert between primitive types?
是什么讓這個
long l = 1;
char c = static_cast<char>(l);
float f = 1.0f;
int i = static_cast<int>(f);
比這更好
long l = 1;
char c = (char)l;
float f = 1.0f;
int i = (int)f;
何時將一個原始數據類型轉換為另一個?
我有很多遺留代碼在類似的情況下使用第二種樣式進行類型轉換,所以這也是一個問題,我是否可以不執行該代碼的全面修訂。
面向未來。
讓我們說將來我這樣做:
float blah = 1.0f;
float* f = &blah;
現在, int i = static_cast<int>(f);
停止編譯,但int i = (int)f;
做一個reinterpret_cast
。
static_cast<int>
這正是我想要你做的 。 (int)
盡你所能讓我得到一個int 。 對於后者,編譯器將不遺余力地為您獲取一個int
值,而這很少(從不?)是可取的。
每一次都是一個跡象。
你不應該經常在原始類型之間進行轉換,因此每次輸入一些額外的字符是一項過於繁重的任務。 這有點像抱怨每次做一些危險的活動時都要戴頭盔。 如果你發現戴頭盔太煩人了,問題很可能是你經常從事危險活動而不是頭盔要求。
至於解決遺留代碼,您可以查看此問題以獲得一些答案(包括我自己的答案)。
是的你應該。
演員陣容是錯誤的主要來源。 它們是類型系統的方法,它是程序員可以使用的最好的錯誤捕獲程序之一。
static_cast比舊的c風格的演員更加明顯和更具體 。 你希望他們脫穎而出。 在調試時,您希望它們顯而易見。 你希望下一個程序員能夠理解你為什么要這樣做。
輸入static_cast<blah>(foo)
更難的事實也是一個好處,因為它會鼓勵你只在絕對必要的情況下施放。
構造函數強制轉換是另一種選擇。 假設定義了轉換構造函數。 例如:
int i(0);
float f(3.14F);
i = int(f);
但是你肯定更喜歡static_cast
廣播和其他C ++演員而不是C風格的演員static_cast
,因為那些基本上會說“嘗試每次演員直到有效”,這最終會達到相當於reinterpret_cast
並且可能會給你不正確的行為。
C風格演員表的問題在於它可以讓你做你不想要的轉換。
這是你將來應該做的事情,但除非你找到問題,否則我不會回去改變它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.