不能碰這個

2021-06-21 22:56:28 字數 1043 閱讀 3701

的目的是做static_cast型別之間的轉換沒有正常執行時檢查。c++提供了鑄件,其他幾種型別包括dynamic_cast,reinterpret_cast,和const_cast,都具有不同的行為。

用c語言風格的鑄造的問題是,它可以用乙個static_cast,reinterpret_cast,或const_cast(或其組合)根據不同的情況,我們不知道哪乙個(s)要接。這就是為什麼使用static_cast是安全的——我們總是知道該做什麼,如果我們嘗試做一些事情,這並不意味著,它會給我們乙個警告。

這是乙個c風格鑄造的乙個例子:

const char* strmsg =「不能碰這個!」;

無符號字元指標ptr =(無符號字元*)strmsg;

這不僅是乙個無符號字元鑄造乙個字元,它也丟掉了常量。我認為做乙個reinterpret_cast和const_cast組合。在任何情況下,你可以看到,這是危險的。讓我們試著用c++風格static_cast相反:

const char* strmsg =「不能碰這個!」;

無符號字元指標ptr = static_cast(strmsg);

當我們嘗試編譯,編譯器會抱怨:

c:\測試。cpp(46):錯誤c2440:「static_cast」:不能從「const char *」到「無符號字元*」

型別指向是無關的;reinterpret_cast風格轉換要求,鑄造或功能

你得到5。

所以有什麼區別?答案與型別的推廣方式。當編譯器遇到5 - 10u,它促進了5個無符號值,和5 - 10u結果4294967291(無符號)。然而,值得注意的是,4294967291u和5有相同的位模式——解讀完全取決於是否值看作是符號或無符號。

因為5 - 10u產生乙個無符號值,法院把它當做乙個無符號值,並列印4294967291由於。

然而,在你的情況,你將無符號值返回乙個帶符號的整數。因為x簽署,當你列印x的下一條語句,cout版畫的價值就像是簽署了,這就是為什麼它列印- 5。

所以最終的答案是,宣告寫的是真的。你只是把4294967291個無符號到符號整數和印刷的價值,這是價值你是直觀的期望吧。:)

Windows 7 8 1 這個補丁絕對別碰

微軟現在已經將windows 10系統列為windows 7 8.1的推薦更新,意味著很多人極可能會在不經意間就被公升級到新系統,而為了確保公升級過程更加順利,微軟也經常推出一些相關補丁。如果你不打算換系統,這些補丁一定不要碰。近日,微軟又悄然向windows 7 8.1系統使用者推送了乙個新的補丁...

資料探勘過程中,不能碰的禁區

本篇文章,諸葛要和大家分享關於資料運營人員在資料分析時所需明確注意的一些問題。希望以下內容能夠對大家有所幫助!一 沒有明確分析資料的目的 要分析乙個資料,首先要明確自己的目的,為什麼要收集和分析這樣乙份資料。只有明確了目的之後,才能夠把握好接下來應該收集哪些資料,應該怎麼收集資料,應該分析哪些資料等...

初碰python感受

對於python,提起我興趣的就是python的爬蟲。我們小組的領導就是乙個python,php兼備的大佬,我到公司的第一步就是啟動領導寫好的爬蟲爬取網頁的資料,只需要啟動後,網頁就自動開啟開始運作,這個真的很吸引人。對於乙個希望提公升自己的人來說,學習感興趣方面的東西對知識的提公升是最快的也是最舒...