c++学习笔记3 - webdancer's Blog
c++学习笔记3
学习C++表达式时首先就是表达式,常见到的算术,关系,逻辑,赋值,条件,逗号等与C的一致,而且比较熟悉。主要是了解一下位操作,自增、自减,箭头,sizeof等。
1。位操作:~(求反),<<(左移),>>(右移),&(位与),^(为异或),|(位或)。可以对整型值进行运算,但是最好是对无符号整型的运算。其实,位运算的语法并不难,难得是二进制运算,必须按位运算,对各种类型必须十分熟悉。其实,用c++自带的bitset 类更简单,容易。
.2。自增(自减)运算:记住两点:
》后置操作符返回未加1时的值。
》前置操作符返回加1后的值,即对象本身。
vector<int> a(4,1); vector<int>::iterator iter=a.begin(); while(iter!=a.end()) cout<<*iter++<<endl
注意:*iter++:等价于:*(iter++),由于为后置++,所以解引用的是未加1之前的值。
.3。箭头(->):为指针类型的变量来取得属性。
4。sizeof : 返回一个类型或对象的长度,返回类型为:size_t。特别的:
》&类型是为返回对象的长度。
》*类型返回指针类型的长度。
》数组返回数组长度乘以数组类型的长度。
复合表达式的问题:
优先级,结合性真的不好记,真的需要的时候就查表吧!(ps:最近学编译,才知道什么叫烦。。必须仔细搞懂)。此外,注意求值顺序的问题。这是个很有趣的问题,
int a[2]={1,2}; int i=0; if(a[i++]<a[i]) cout<<"a[0]<a[1]"<<endl;
如果左边先计算,a[0]<a[1],则会输出;如果右边先计算,a[0]<a[0],则不会输出。在我的机子里,不会输出。
new和delete的问题:
int *i=new int(6); cout<<*i<<endl;//1 delete i; i=0; cout<<*i<<endl;//2
delete以后,例如delete i 后,i变成了悬浮指针,此时可使用此指针。最好立即将此指针赋值为0。然后,使用此指针会有异常出现。上面的例子中:第二次cout会出现异常。不同的编译器处理也不同,在vc中,上面的例子无法运行;在gcc中可以运行。在动态内存管理中,经常造成内存管理错误,比如删除指针错误,读取删除的对象。
类型转换:
隐式类型转换可能要理解一下,经常用,但是以前不太明白。
string s; while(cin>>s)
不知道测试的什么,在这里会做类型转换。