C++ 语法基础
iostream
using namespace std;
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
在开-O2
的情况下,
- 关同步
- 解tie
- 不使用endl
这样iostream
可以远远快于cstdio
。
using namespace std;
cin >> x >> y;
cout << x << y << '\n';
cin
管道向右,cout
管道向左,两者都写在最左边。
预处理命令
宏可以带参数,带参数的宏可以像函数一样使用:
#define sum(x, y) (x + y)
但是注意计算时的括号,否则会引发歧义。
变量
基本数据类型
类型 | 关键字 |
---|---|
布尔型 | bool |
字符型 | char |
整型 | int |
浮点型 | float |
双浮点型 | double |
无类型 | void |
int类型
可以用关键字进行修饰
类型名 | 位宽 |
---|---|
short int | 16 |
unsigned short int | 16 |
int | 32 |
unsigned int | 32 |
long int | 32 |
unsigned long int | 32 |
long long int | 64 |
unsigned long long int | 64 |
类型转换
数值提升
数值提升时,值不变。(小范围到大范围)
数值转换
数值转换时,值可能改变。
- 位宽较大的浮点数转换为位宽较小的浮点数,会将该数舍入到目标类型下最接近的值。
- 浮点数转换为整数时,会舍弃浮点数的全部小数部分。
- 整数转换为浮点数时,会舍入到目标类型下最接近的值。
- 将其他类型转换为 bool 类型时,零值转换为 false,非零值转换为 true。
运算
位运算符
运算符 | 功能 |
---|---|
~ | 逐位非 |
& | (双目) 逐位与 |
| | 逐位或 |
^ | 逐位异或 |
<< | 逐位左移 |
>> | 逐位右移 |
注:markdown中需要用\|
来表示|
注:位运算符的优先级低于普通的算数运算符。
自增自减运算符
++i
:i+=1,返回i
i++
:存下i,再把i+=1,返回临时变量
= 与 ==
=为赋值符号,当赋非0时返回True,赋0时返回False
逗号运算符
逗号的作用是将一系列运算按顺序执行。
使用逗号运算符目的是把几个表达式放在一起。
整个逗号表达式的值为系列中最后一个表达式的值。
例:
for(i=1, j=0 ; i<100 && j <300; i++, j*=3)
{
}
成员访问运算符
运算符 | 功能 |
---|---|
[] | 数组下标 |
. | 对象成员 |
& | (单目) 取地址/获取引用 |
* | (单目) 间接寻址/解引用 |
-> | 指针成员 |
流程控制语句
Switch
switch (选择句) {
case 标签1:
主体1;
break;
case 标签2:
主体2;
break;
default:
主体3;
}
选择句和标签都必须为整数。
需要定义变量时,必须加花括号。
do while
先执行后判断。
数组
数组只能逐值修改,不能整体赋值。(除非用内存操作)
大数组应该尽量定义为全局变量(静态区),局部变量可能爆栈(栈区)。
数组是一个(由编译器管理的)内存地址,角标为偏移量,允许越界访问,甚至允许访问负角标,但是可能产生非法后果。