第4章 C++基础语法
4.1 理解c=2πr
注释comment :由“//”引起
语句statement:必须以分号结尾
标识符identifier :代表一定含义的名字
变量variable:标识符只注重名字,而变量的值是可变的
字面常量literal constant:在程序中不会改变,如2就是2,不会等于3
运算符operator:+ - * =等
表达式expression:标识符与操作符构成的表达式
左值l-value:置于复制操作符“=”左边的,必须是一个变量。
右值r-value:…………“=”右边,不一定是变量,也可以是字面常量
4.2 注释
块注释 /* */
行注释 //
4.3标识符
即名字
4.3.1 命名规则
标识符只能包含字母、数字、下划线
不能以数字开头
不能用C++的关键词做标识符
严格区分大小写
4.3.2 关键字
C++ 中定义了以下关键字
asm | do | if | return | typedef |
auto | double | inline | short | typeid |
bool | dynamic_cast | int | signed | typename |
break | else | long | sizeof | union |
case | enum | mutable | static | unsigned |
catch | explicit | namespace | staic_cast | using |
char | export | new | struct | virtual |
class | extern | operator | switch | void |
const | false | private | template | volatile |
const_cast | float | protected | this | wchar_t |
continue | for | public | throw | while |
default | friend | register | true |
|
delete | goto | reintpret_cast | try |
|
此外,C++还定义了保留字,建议不要用其作为标识符
and | and_eq | bitand | bitor | compl |
not | not_eq | or | or_eq | xor |
xor_eq |
|
|
|
|
整形int 浮点型float 布尔型bool 字符型char |
|
数组array 指针pointer 引用reference |
符合类型
结构struct 联合union 枚举enum 类class |
自定义类型
4.5基本类型(primitive type)
4.5.1 整形int
用来表示整数 int=integer
短整形short、整形int、长整形long;
整形分为有符号型signed、无符号型unsigned
默认情况下整形是有符号的
短整形长度16位(2字节)长整形长度32位(4个字节)
4.5.2 浮点型
表示实数类型(主要是小数)
包括单精度float 双精度double 长双精度型long double
单精度长度32位(4字节) 双精度长度64位(8字节)双长精度长度128位(8~16字节)
注意没有long float 或者unsigned double这种组合
4.5.3 布尔型
bool=Boolean
1就是真 0就是假
4.5.4 字符型
表示文本字符 char =character
char只占1个字节
中文字符是宽字符用wchar_t表示宽字符(占用16为,2个字节)
4.5.5 基本类型的字节长度
sizeof允许程序在运行时刻获取不同数据类型的字节数
c++标准对如下大小顺序做了规定:
1=sizeof(char)<=sizeof(short)<=sizeof(int)<=sizeof(long)
4.6字面常量
字面常量的值在程序中不会改变
4.6.1整数常量
整数常量一般可以表示成十进制、八进制、十六进制。
八进制在数值前面加“0”
十六进制在树枝前面加上“0x”或者“0X”
默认情况下,整形常量被认为是有符号的Int型,可以在数值后面加上l或这L指定其为long型,或者u或U指定其为unsigned型,这两个后缀也可以组合使用。
4.6.2 浮点型常量
浮点型常量一般可以表示成十进制,也可以采用科学技术法 ,如10e-2。
默认情况,浮点型常量被认为是double行,可以在数值后面加上f或者F/l或者L,指定其为float型/long double型
l和f不能同时使用。
4.6.3 布尔型常量
只包含2个:true 和false。 不要写成大写。
4.6.4 字符型常量
一般以单引号“’”括起
c++提供的转义字符
转义字符 | 含义 |
/’ | 单引号’ |
/” | 双引号” |
// | 反斜杠/ |
/t | 水平制表符(Tab) |
/r | 回车 |
/n | 换行 |
/b | 退格 |
/a | 响铃 |
/f | 进纸 |
/v | 垂直制表符 |
/? | 问号 |
/ooo | ooo代表3个八进制数字 |
/x | 代表十六进制数 |
可以在字符前面加上“L”,指定字符为wchar_t
注意L不能小写,不能和后面字符有空格,不能放在后面
4.6.5 字符串常量
即一串字符 由“””括起一个或者多个字符,如”abc”
如果字符串太长,需要写成多行,可以在前面行的末尾加上反斜杠/
如
“hello,/
world!” 完全等价与”hello,world!”
也可以声明宽字符的字符串L” hello,world!”,但是不允许L” hello,””world!”这种宽字符和非宽字符的串接
4.6.6 字面常量的类型
typeid允许在运行时刻获取指定数据的类型
如:cout<<”type name of 100:”<<typeid(100).name()<<endl;
输出内如如下:type name of 100:int
4.6.7 变量
可以同时声明同种类型的多个变量
4.7 语句
总是以一个分号结束
4.7.1 表达式
由字面常量、变量、操作符和函数调用等组成
4.7.2语句
4.7.3声明语句
一个变量不能被重复定义
4.7.4 赋值语句assignment
不能为一个字面常量赋值
4.7.5 初始化语句initialization
在定义一个变量的时候同时进行赋值
还可以用括号()将初始值括起来
如:doubler(100);
注:没有初始化的变量是不应该使用的
4.7.6 使用调试器观察变量值
P64
4.8 操作符operator
4.8.1赋值操作符
=
可以被连起来使用,如a=b=100; 赋值顺序从右向左。
4.8.2算术操作符
* / % + - ++ --
++作为后缀时如 b=a++,意味着先赋值b=a,再进行自加加a++,同理其他。
4.8.3 关系操作符
> >= < <= ==等于 !=不能与
4.8.4逻辑操作符
&&与 ||或 !非
4.8.5条件操作符
?:
<表达式1>?<表达式2>:<表达式3>
如果表达式1为true就返回表达式2的值,否则就返回表达式3的值
4.8.6 位操作符
用来对数值进行位操作
&位与 |位或 ^异或 ~取补 <<左移 >>右移
详细解释见书P70~71
4.8.7观察二进制位操作
bitset 输出数的二进制表示
4.8.8复合赋值操作符
+= -= *= /= %= <<= >>= &= |= ^=
4.8.9逗号操作符
由逗号分隔的表达式,其值等于逗号后面的值,逗号是优先级最低的操作符
4.8.10 sizeof 操作符
用法
sizeof(变量)
sizeof(类型)
sizeof变量
sizeof返回一个类型为size_t的数值,可以认为这个size_t类型等于unsigned int。
4.8.11 typeid操作符
用于返回一个变量或数据类型的“类型”
用法
typeid(类型)
typeid(变量
4.8.12 操作符的优先级
从高到低排序:
(){}->
!~++--+-*&(type)sizeof
*/%
+-
<<>>
<ó>=
== !=
&
^
|
&&
||
?:
= += -= *= 、= &= ^= |=<ó>=
,
4.9类型转换conversion
4.9.1隐式转换
从short bool char到int的转换叫做隐式转换
如 int i;
short s = 100;
i=s; //shortàint
4.9.2显式转换
我们用显式转换cast,又称强值类型转换,告诉贬义词这种转换正式程序所期望的,不要再抱怨。
语法:
(类型)表达式;
类型(表达式);
(类型)(表达式);
如: s2=()short 100000; //ok
以上表达式非常清晰,但是C++并不推荐,推荐使用(static_cast、dynamic_cast、const_cast和reinterpret_cast)来完成,见18.2节
4.9.3 算术转换p77
小于整数的数值总会先被转换成整形,这个规则一般称做整形提升
为了防止数据的损失,a、b类型总是提升为两者中较宽的类型