C++为什么不要=通过使用无符号类型避免负值
发表于:2025-01-28 作者:千家信息网编辑
千家信息网最后更新 2025年01月28日,本篇内容介绍了"C++为什么不要=通过使用无符号类型避免负值"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有
千家信息网最后更新 2025年01月28日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安全错误
数据库的锁怎样保障安全
企业服务器组外网
浙江华为服务器虚拟化安装云空间
分析数据库的特征
网络安全的漏洞和防护
查询数据库分表
邮储银行软件开发加班吗
加强网络安全讲活
停止安全中心通知服务器
cjgl数据库
通州区网络安全产业园开园
电脑网络安全密码不匹配怎么办
南通有哪些网络技术公司
大话西游 服务器转出名额
扬州软件开发公司找哪家
司法厅开展网络安全宣传
网络安全设计与集成一级资质
爱思升级正在尝试恢复数据库
正定兜鞍网络技术
erp软件开发环境j2ee
漳州直播软件开发项目交流
关于软件开发的工作检讨
党对网络安全问题的
pg数据库添加只读权限账户
长春多媒体安全文化展厅软件开发
二零一八年网络安全宣传周活动
软件开发辅助设备摊销
中远集团服务的网络技术
网络技术大学有哪些
上海专业的进销存软件开发教程
阜阳餐饮软件开发定制