C++ Primer Plus 第五章

来源:互联网 发布:网易企业邮箱域名 编辑:程序博客网 时间:2024/06/06 07:23
y = (4 + x ++) + (6 + x++); 4 + x++ 不是一个完整表达式,因此,C++不保证x的值在计算子表达式 4 + x++后立刻增加1,C++只能保证这一条语句执行完后,x增加2

++n与n++,如果是用户定义的类类型,那么后缀版本首先复杂一个拷贝,将其+1,然后将复杂的拷贝返回,所以后缀版本会更快一些;但对于内置类型,则没有区别

前缀递增,前缀递减,解引用操作符优先级相同,以从右至左的方式结合。后缀递增,后缀递减的优先级相同,但比前缀操作符的优先级高,并以左到右的方式结合。
后缀递增,后缀递减                          | 左到右
前缀递增,前缀递减,解引用操作符     | 右到左

语句块(即{}括起来的)
在语句块中定义的变量将覆盖外部变量,并且变量将只在语句块中使用

逗号表达式中的逗号操作符是一个顺序点(即C++会保证所有的表达式运算计算完,如递增,递减);逗号表达式的值是最后一个表达式;逗号操作符的优先级是最低的
例如cata = 17 , 240,则cat值为17;cata = (17, 240), 则cat值为240;

关系操作符 一般比 算术操作符 优先级 低

char word[5];
word == "mate"
这个表达式不是判断两个字符串内容是否相等,而是word与"mate"的首地址是否相等。
int strcmp ( const char * str1, const char * str2 ); 比较两个C风格字符串大小关系,相等返回0;此外 str1 > str2 return 正数; str1 < str2 return 负数;

string word;
word == "mate";"mate" == word;
此时都是在判断判断两个字符串内容相等(用重载与友元完成)

typedef 创建别名,其并不会创建新的类型,而是为已有的类型建立一个新名称。

char ch;
cin >> ch;cin在读取基本类型时,会忽略空格,换行符,消费掉,但不会保存。
cin.get(ch);会读取所有的类型(note,这里的写法的C中是错的,但是在C++中cin.get(char &)是声明为引用的,所以不会错

EOF文件尾,检测到EOF后,cin将 eofbit failbit 设置为1,可以通过cin.eof()与cin.fail()成员函数来查看。可以用cin.clear()来清除标志位

cin.get(char)方法的返回值是一个cin对象,istrean类型提供了一个可以将istream对象转换为bool值的函数;所以在cin需要bool值的地方,该转换函数将被调用,如while(cin)

char ch;
ch = cin.get();
cin.get(ch);
都是读取值到ch中,但是 cin.get()的返回值是一个char, cin.get(ch)返回值是一个cin

常量值EOF表示未见尾
0 0