常被人忽略的一些语法问题
来源:互联网 发布:unity3d poolmanager 编辑:程序博客网 时间:2024/06/06 00:07
学习C++两个年头了,在学习的过程中经常碰到一些看似很简单,但却经常被人忽略的语法问题。在此我整理一下自己在学习过程中范的一些小错误,错误虽小,但却必须重视。
第一个问题:
#include <vector>#include <iostream>using namespace std;void main(){int i = 2, j;j = i++ + ++i;cout << j <<endl; //等于6i = 2;i = i++ + ++i;//换((i++) + (++i));此种形式,依然等于7cout << i <<endl; //等于7,为什么等于7呢?}
自认为大虾的朋友们,可以试试能看出问题吗?
根据cyz108D这位哥们的评论,我总结了原因如下:
问题是由于i++引起的,i = i++ + ++i会先执行i = 右边的表达式,最后再i++操作,所以结果就出现了一个6,一个7。
总结:操作符优先级问题。
第二个问题:
UINT uN = 3;
BOOL bRt = (-1 < uN);
bRt结果为FALSE。原因估计很多朋友,都能说的出来。
无符号版本和有符号版本的区别就是无符号类型能保存2倍于有符号类型的正整数数据,比如16位系统中一个int能存储的数据的范围为-32768~32767,而unsigned能存储的数据范围则是0~65535。由于在计算机中,整数是以补码形式存放的。根据最高位的不同,如果是1,有符号数的话就是负数;如果是无符号数,则都解释为正数。
总结:切记不要用无符号整型和负数比较。因为程序会将-1转换成无符号整型后再和无符号整型作比较,-1转成无符号整型后会变成很大的数 。
第三个问题:
与或优先级问题,看看各位大虾有多少和我犯同样错误的?
x = 1, y = 0, z = -1;
q = ++x || ++y && ++z;
q会等于0?还是1?
你认为呢?
看分析:
优先级 操作符
1 () [] -> .
::
! ~ ++ --
2 - (unary) * (dereference)
& (address of) sizeof
3 ->* .*
4 * (multiply) / %
5 + -
6 << >>
7 < <= > >=
8 == !=
9 & (bitwise AND)
10 ^
11 |
12 &&
13 ||
14 ? :
15 = += -= etc.
16 ,
注意:由于||和&&都是从左向右执行,而&&优先级大于||,所以实际执行效果是q=(++x)||(++y && ++z);
所以q的结果是1。
我原先一直停留在&&和||的优先级相同,共同存在时都是自左向右执行,结果就成了0.
说了惭愧啊。。
- 常被人忽略的一些语法问题
- android一些容易被忽略的问题
- string容易忽略的一些问题
- 【java】一些容易忽略的问题
- Duilib 一些可能被忽略的问题
- string容易忽略的一些问题
- Crystal语法中容易忽略的细节问题
- [转载]大型项目管理的容易忽略的一些问题
- css中margin的一些易忽略的问题
- 在strutrs2遇到的一些会忽略的问题
- 一些被我忽略的问题(字符串指针)
- java容易被人忽略的一些小问题
- 一些经常被忽略的细节性问题(一)
- js 关于this的一些语法问题
- 关于语法运用的一些其他问题
- 关于语法运用的一些其他问题
- java--基础语法的一些细节问题
- 处理语法高亮的一些问题
- C陷阱与缺陷(八)建议
- Sublime Text 2 折腾备忘篇
- Android系统移植与调试之------->Android Make分析
- main----hot_news
- java 内容截取类
- 常被人忽略的一些语法问题
- 哈工大 基础算法 1002 汉落塔问题
- 选择尽可能多的不相交区间
- (转)提高你开发效率的十五个Visual Studio 2010使用技巧 .
- 第一个数据库程序纪念下
- notebook的使用
- Android 画图常用类
- java mysql 数据库连接类
- 网络编程