不能碰这个
2014-05-07 13:31
85 查看
的目的是做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个无符号到符号整数和印刷的价值,这是价值你是直观的期望吧。:)
用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个无符号到符号整数和印刷的价值,这是价值你是直观的期望吧。:)
相关文章推荐
- SpringApplicationConfiguration 这个不能用 怎么办?
- 据说vmware中centos桥接模式不能上网?这个为解决方式
- js 退后一步并刷新,window.history.back(-1);这个只能后退一步不能刷新,
- 贝塔斯曼龙宇:寒冬被夸大,资本依然在寻找好项目——这个团队要是一个真正的有决心创业的团队,一定不是机会主义的——年轻人不能只有热情、没有特点、浪费时间——创业是少数派的事情——风投一年也就投10几个项目
- 敏感词测试 检查单 2015-12-31-01 这个博客不能用了。
- Linux下Eclipse配置安装 PyDev(Pydev插件一直不能成功,安装这个插件失败的问题)
- Access-Control-Allow-Origin这个header这个头不能设置通配符域名
- 这个百度浏览器也是的,不能查询12306的票
- 官网跟这里不能下载了,请大家到这个网站下载 FinalSpeed.org
- 解析诺基亚机皇N9,这个真不能放弃!
- Windows不能用鼠标双击运行jar文件,装两个jdk卸载一个之后会发生这个问题
- Q(这个题提交失败,但样例是对的QAQ,好像服务器有问题,不能提交)
- 繁多的新技术让我这个老IT也感觉到很压抑,需要学会放弃学会放松自己,不能跟自己过不去了
- 客户的某个电脑不能访问某个域名,但是其他电脑可以访问这个域名,这是为什么呢?
- U 盘全新安装 Mac OS X 提示【这个“安装 OS X ……”应用程序副本不能验证】的解决方法
- angularjs,浏览器的记住密码功能,不能使pwd这个文本框自动 watch?
- 有一个整型二维数组,假设a[3][4] = {初始化了值},求出这个二维数组中所有的最大值,以及最大值对应的下标。 数组内部原有的值不能改变位置。
- js 退后一步并刷新,window.history.back(-1);这个只能后退一步不能刷新,
- 大哥你都有房子有车子还拿着双份工资收入,不能总想让兄弟免费来杭州帮忙啊,开不来这个口啊
- aws EC2 挂载 其它卷(aws EC2 网络配置出错,不能 ssh 连接时,需要启动一个新实例,去挂载 这个出错的卷,来修改卷里的错误配置)