91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2021-11-25 16:23:07 來源:億速云 閱讀:143 作者:iii 欄目:大數據

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

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

Reason(原因)

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

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

在實際的代碼中,這些(完全合法的)構造中的隱含的問題很難發現,會帶來很多現實世界中的錯誤。考慮下面的代碼:

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賦給一個無符號整數時,會變成一個最大的無符號整數。同時,由于無符號數學運算是按模運算,乘法運算不會溢出,而是發生回繞。

Example(示例)

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

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

Alternatives(其他選項)

  • use signed integers and check for x >= 0

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

  • use a positive integer type

  • 使用一個正整數類型

  • use an integer subrange type

  • 使用值域限定的整數類型

  • Assert(-1 < x)

  • 使用斷言檢查(-1<x)

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++為什么不要=通過使用無符號類型避免負值”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

台北县| 华池县| 长治县| 民权县| 英山县| 留坝县| 开封市| 岳普湖县| 托克逊县| 永顺县| 福清市| 城市| 潜山县| 墨竹工卡县| 克东县| 澎湖县| 米泉市| 东莞市| 皋兰县| 山丹县| 江陵县| 临邑县| 凤冈县| 德兴市| 凤城市| 正宁县| 托克逊县| 阿拉尔市| 旅游| 五华县| 九江市| 仪征市| 凤凰县| 尼勒克县| 辽宁省| 潞西市| 堆龙德庆县| 阿克| 平定县| 昭平县| 兴山县|