C++为什么不要=通过使用无符号类型避免负值
发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,本篇内容介绍了"C++为什么不要=通过使用无符号类型避免负值"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有
千家信息网最后更新 2025年12月01日C++为什么不要=通过使用无符号类型避免负值
本篇内容介绍了"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
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++为什么不要=通过使用无符号类型避免负值"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
符号
整数
类型
负值
运算
号数
示例
C++
代码
内容
实际
更多
知识
错误
检查
合法
实用
最大
学有所成
接下来
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
北京gps时间同步服务器
土豆王国服务器要来到
电脑拨号软件开发
数据库添加三表
讯飞录音自动上传服务器
怀旧服一个服务器建多少个人物
部队网络安全教育内容
重庆服务器防火墙直供
路由器加硬盘能做成数据库吗
更改数据库用户的密码
和平精英无法接通服务器怎么办
如何卸载access数据库
国家网络安全宣传主题歌
实时数据库的组态一般分为两部分
lol如何查找服务器
黔商互联网科技有限公司
服务器ip和端口号怎么查询
数据库基础知识扫盲
戴尔服务器修改bios引导
Tor和网络安全法
数据库1438
怎么改变数据库表的显示顺序
13个顶级域名服务器
黔商互联网科技有限公司
荷兰酒店服务器
三级网络技术用什么教材
浙江诚信网络技术咨询售价
一台服务器怎么配多台打印机
数据库交互式控件
电脑海报制作软件开发