型別轉換是使c ++具有更多型別安全性,更強大的功能,並且可以說服您在c上使用它。但是,當您是新手或從c背景移居時,這也是乙個被低估的主題。 因此,我想出了一篇關於它的文章。 在這裡,我們將不僅看到帶有c開發人員示例的c ++型別轉換,而且還將介紹為什麼我們需要型別轉換? & c ++型別的鑄造作弊**,c開發人員可以輕鬆記住和使用它。
儘管我不是專家,但是到目前為止,這是我從各種**和5年以上的行業經驗中學到的。
在c ++中,有5種不同型別的強制型別轉換:c樣式強制型別轉換,static_cast,const_cast,dynamic_cast和reinterpret_cast。
我通常以「我們為什麼需要它?」開頭,但是這一次我們首先快速了解一些術語,並以一些有關型別轉換的cpp核心指南結束本文。
隱式轉換:編譯器在其中自動進行型別轉換。 像float f = 3;一樣,在這裡編譯器不會抱怨,而是直接將整數型別3轉換為float並分配給f。
顯式轉換:開發人員使用強制轉換運算子指導轉換。 所有型別的手動轉換都屬於顯式型別轉換類別。 像int * p =(int *)std :: malloc(10);,這裡我們顯式將void *強制轉換為int *。
l-value:代表記憶體位置的識別符號。 例如,變數名,* ptr(ptr指向記憶體位置等)。
r值:不是l值的值,r值出現在賦值(=)運算子的右側。 喜歡
int a = 5 ; // 5 = r-value,
q = p + 5 ; // p + 5 is r-value
class a ;
class b ;
int main ()
exit status 1
error: no viable conversion from 'b' to 'a'
a a = b;
^ ~
note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'b' to ' const a &' for 1st argument
class a {};
^note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'b' to 'a &&' for 1st argument
class a {};
^1 error generated.
class b
};
int main () ;
class d : public b {};
class x ;
int main ()
1.忽略常數
int i = 0 ;
const int & ref = i;
const int * ptr = &i;
*ptr = 3 ; // not ok
const_cast < int &>(ref) = 3 ; //ok
* const_cast < int *>(ptr) = 3 ; //ok
2.使用const this指標修改資料成員
class x
void changeandprint ( int *temp)
};int main ()
3.將const引數傳遞給僅接受非const引數的函式
int fun ( int * ptr)
int main ( void )
4.被拋棄的揮發性屬性
base* createrandom ()
base* base = createrandom();
derived1 *pd1 = dynamic_cast (base);
if (pd1)
error: static_cast from 'int *' to 'uintptr_t'
(aka 'unsigned long' ) is not allowed
uintptr_t ptr = static_cast < uintptr_t >(p);
^~~~~~~~~~~~~~~~~~~~~~~~~
1 error generated.
uintptr_t ptr = reinterpret_cast < uintptr_t >(p);
閱讀完所有這些內容後,您可能會混淆使用什麼以及何時使用! 這就是為什麼我建立了這個作弊**
注意:通常應避免使用const_cast
和reinterpret_cast
因為如果使用不正確,它們可能會有害。 除非您有充分的理由使用它們,否則不要使用它。
from:
IT開發人員
其路五 轉行到市場 絞盡腦汁的想想,我所知道的人之中只有兩個開發人員去了市場,這兩個人都不能說是朋友,認識而已。他們都是主動要求去了市場,結果是這兩個人均在市場都是乾到一年左右,然後都自已開公司了。呵呵,很奇怪,極高的轉行成功率!不過仔細想想,我對這兩個人的思路佩服的五體投地。能下決心仍掉每月5 6...
開發人員必讀
對於剛開始學習軟體開發的新人來說,必備技能 往往意味著乙個長長的 標有重要度的學習列表,但是過長的列表通常會導致新人不知如何開始學習,壓力倍增。本文嘗試列舉出最重要的幾個技能,也期望通過此列表能給新人乙個比較明確的學習重點和路徑。沒有掌握任何一門程式語言,就不可能成為一名程式設計人員。許多程式設計師...
開發人員的開發效率
影響開發效率的因素,總結有五大方面 任務不明確 流程不順暢 需求變更多 責任心不夠 能力有瓶頸。針對這些因素,分別可以從以下五個方面來優化和改進。制定清晰的規範尤其是開發規範。無規矩不成方圓。營造良好的團隊文化氛圍,人性化的管理方式。愉悅狀態下的工作效率遠遠高於抑鬱狀態下的效率。定期舉行技術分享交流...