本部分罗列了一些难点和注意点,以便复习巩固或者回忆,关注私聊我可以免费领取pdf版C++ Primer Plus 第6版。
1.副作用与顺序点
int i = 1;
int b = (5 + i++) + (4 + i++);
2.前缀的效率比后缀高 前缀将值加一,返回结果;后缀复制一个副本,将其加一,将复制的副本返回。
3.后缀运算符优先级高,从左向右结合;前缀运算符和*优先级相同,从右向左结合。
4.新变量会隐藏就变量,然后变量再次可见
int i = 1;
int b = (5 + i++) + (4 + ++i);
{
int b = 20;
cout << b << endl;
}
cout << i << b;
5.逗号:列表分隔符和逗号运算符。逗号的优先级是最低的。从左向右计算;取第二个值。
6.循环中的变量每轮循环都被分配和释放,影响速率,另一方面,循环结束后会被丢弃。
7.关系运算符的优先级低于算术运算符。
8.strcmp()判断字符串是否相等。strcmp(str1,str2)==0 !=0 >0 <0.
9.string类型 可以用!= 来进行比较
10.C++中string类型转换成char* C++中string类型转换成char*_The wind of freedom blows-CSDN博客
11.编写延时循环
long wait =0;
while(wait<10000)
wait++;
#include
#include
using namespace std;
int main()
{
cout << "Enter the delay time,in seconds :";
float secs;
cin >> secs;
clock_t delay = secs * CLOCKS_PER_SEC;
clock_t start = clock();
while (clock() - start < delay);
cout << "done!";
return 0;
}
12.类型别名
预处理器: #define BYTE char 预处理时将BYTE全部换成char。此方法不适用声明一系列变量。
#define FlOAT_POINTER float *;
FLOAT_POINTER pa,pb; //pa a pointer float , pa just a float
typedef typedef typeName aliasName;此方法能处理更复杂的别名。它不会创建新类型,只是起个别名。
13.基于范围的for循环(C++11)
for (typeName name : array) 要使用namefor (typeName &name : array) array可用{ ,,,}
14.cin会忽略空格和换行符 cin.get(ch)能处理这个问题。 cin.get()传递的是一个引用。
15.哨兵字符
char ch;
cout << "Enter characters ; enter # to quit :";
cin.get(ch);
while (ch != '#') {
cout << ch;
cin.get(ch);
}
16.文件尾条件EOF
char ch;
cout << "Enter characters ; enter CTRL-Z AND to quit :";
cin.get(ch);
while (cin.fail()== false) //while(!cin.fali()) while(cin)
{
cout << ch;
cin.get(ch);
}
while(cin.get(ch))
{
...
}
17.ch = cin.get(); 类似于c中的getchar()
cin.get(ch)返回一个cin对象
cout.put(ch); 类似于c中的putchar()
char ch;
ch = cin.get();
while (ch != EOF) //while(!cin.fali()) while(cin)
{
cout.put(ch);
ch = cin.get();
}