导语
今天我们继续来讲几个C++常用的小知识:
1.C++中的所有运算符
2.流(stream)和缓冲区(buffer)
1.C++中的所有运算符
下面是C++中的所有运算符,按照优先级从高到低的顺序排列:
运算符 | 描述 |
---|---|
:: | 作用域解析符 |
[] | 数组下标 |
() | 函数调用 |
. | 成员访问(结构体或类) |
-> | 成员访问(指针结构体或指针类) |
++, -- | 前缀自增自减 |
+, - | 正负号 |
!, ~ | 逻辑非、按位取反 |
*, /, % | 乘、除、模 |
+, - | 加、减 |
<<, >> | 左移、右移 |
<, <=, >, >= | 小于、小于等于、大于、大于等于 |
==, != | 等于、不等于 |
& | 按位与 |
^ | 按位异或 |
| | 按位或 |
&& | 逻辑与 |
|| | 逻辑或 |
=, +=, -=, *=, /=, %=, <<=, >>=, &=, ^=, |= | 赋值、复合赋值 |
其中,一些运算符也可以用于重载,例如 +、-、、/、%、&、|、~、!、=、<、>、<<、>>、^、++、--、()、[]、->、->、new、delete 等运算符可以重载。
2.流(stream)和缓冲区(buffer)
在C++中,流(stream)是一种从源头到终点的数据传输方式。源头和终点可以是文件、键盘、屏幕、网络连接等等。缓冲区(buffer)则是在进行数据传输时,用于临时存储数据的区域。
当我们使用C++输入输出流时,数据会先被存储在缓冲区中,然后根据一定的规则进行读写操作。在输出流中,数据会在缓冲区被填满之后才会被输出。在输入流中,数据会在缓冲区被读取完之后才会进行下一次读取。
下面是一些常用的缓冲区操作:
-
flush:清空缓冲区并将数据立即输出。可以使用endl操作符或者flush()函数来刷新输出流缓冲区。
-
setw:设置输出流中的字段宽度(field width)。
cout << setw(10) << "Hello" << endl;
上述代码将输出一个长度为10的字段,其中的字符串为"Hello",如果"Hello"不足10个字符,输出就会被填满,如果超过10个字符,就会被截断。
setprecision:设置输出流中浮点数的精度。
cout << setprecision(4) << 123.456789 << endl;
上述代码将输出123.5,因为我们设置了浮点数的精度为4,所以输出会四舍五入到小数点后第4位。
setiosflags:设置输出流中的一些格式选项。
cout << setiosflags(ios::left) << "Left-aligned" << endl;
cout << setiosflags(ios::right) << "Right-aligned" << endl;
上述代码将输出两行字符串,第一行字符串左对齐,第二行字符串右对齐。
unformatted input/output functions:这些函数可以直接读写数据,而不需要考虑缓冲区的问题。常用的函数包括get()、put()、getline()等等。
char c;
cin.get(c);
cout.put(c);
上述代码将从标准输入流中读取一个字符,然后将它输出到标准输出流中。由于使用了unformatted input/output functions,所以数据直接从流中读取或写入,不需要考虑缓冲区。
总之,缓冲区对于C++输入输出流的操作至关重要,我们需要了解它的内部工作原理,以便更好地掌握输入输出流的使用。