真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網站制作重慶分公司

C++為什么不要=通過使用無符號類型避免負值

本篇內容介紹了“C++為什么不要=通過使用無符號類型避免負值”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

鎮(zhèn)寧網站建設公司創(chuàng)新互聯(lián),鎮(zhèn)寧網站設計制作,有大型網站制作公司豐富經驗。已為鎮(zhèn)寧上千多家提供企業(yè)網站建設服務。企業(yè)網站搭建\成都外貿網站建設公司要多少錢,請找那個售后服務好的鎮(zhèn)寧做網站的公司定做!

ES.106:不要試圖通過使用無符號類型避免負值

Reason(原因)

選擇無符號數(shù)意味著修改整數(shù)的很多無用行為(如含按模運算),這會抑制溢出關聯(lián)的警告信息,為有符號/無符號數(shù)混合計算相關的錯誤打開了大門。使用無符號數(shù)不會真的消除負值的可能性。

Example(示例)

unsigned int u1 = -2;   // Valid: the value of u1 is 4294967294
int i1 = -2;
unsigned int u2 = i1;   // Valid: the value of u2 is 4294967294
int i2 = u2;            // Valid: the value of i2 is -2

在實際的代碼中,這些(完全合法的)構造中的隱含的問題很難發(fā)現(xiàn),會帶來很多現(xiàn)實世界中的錯誤??紤]下面的代碼:

unsigned area(unsigned height, unsigned width) { return height*width; } // [see also](#Ri-expects)
// ...
int height;
cin >> height;
auto a = area(height, 2);   // if the input is -2 a becomes 4294967292

記住當-1賦給一個無符號整數(shù)時,會變成一個最大的無符號整數(shù)。同時,由于無符號數(shù)學運算是按模運算,乘法運算不會溢出,而是發(fā)生回繞。

Example(示例)

unsigned max = 100000;    // "accidental typo", I mean to say 10'000
unsigned short x = 100;
while (x < max) x += 100; // infinite loop

如果x是一個有符號短整數(shù),我們會收到一個由于溢出而導致無定義行為的警告。

Alternatives(其他選項)

  • use signed integers and check for x >= 0

  • 使用有符號整數(shù)并檢查x是否大于0

  • use a positive integer type

  • 使用一個正整數(shù)類型

  • use an integer subrange type

  • 使用值域限定的整數(shù)類型

  • Assert(-1 < x)

  • 使用斷言檢查(-1

For example(示例)

struct Positive {
   int val;
   Positive(int x) :val{x} { Assert(0 < x); }
   operator int() { return val; }
};

int f(Positive arg) { return arg; }

int r1 = f(2);
int r2 = f(-2);  // throws

“C++為什么不要=通過使用無符號類型避免負值”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關的知識可以關注創(chuàng)新互聯(lián)網站,小編將為大家輸出更多高質量的實用文章!


本文名稱:C++為什么不要=通過使用無符號類型避免負值
文章分享:http://weahome.cn/article/isgigs.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部