1-基本内置类型
char类型, 应该确保可以存放机器基本字符集中任意字符对应的数字值。
float
和double
分别有7和16个有效位(long double
根据硬件,和需求不同,精度不同)。字符型分为三种:
char
,signed char
,unsigned char
。
选择类型的经验:
1. 明确数值不为负,选择无符号类型。
2. 使用int不使用short。
3. 浮点运算用double,不用float(计算代价相差无几)。
类型转换
bool b = 42; //b为trueint i = b; //i的值为1unsigned char c = -1; //假设char占8bit,c的值为225 - 赋值给无符号类型一个超出它表示范围的值时, 结果时初始值对无符号类型表示数值总数取模的余数。 -1%256=255 - 负数b对a取摸,在b上加a,知道b变为正数,再用这个正数对a取摸。 - 取摸方法: 1. 求整数商 c=a/b 2.得余数r=a-c*b - ps: c++中取摸同取余, python中是真正的取摸
一个算数表达式中既有无符号数
又有int
时,int值转换为无符号数。把负数抓换为无符号数结果等于这个负数加上无符号数的模。切勿混用带符号类型和有符号类型。
字面值常量
以0
开头的整数代表八进制,0x
或0X
开头代表十六进制。八进制和十六进制字面值可以使带符号的。short
类型没有对应字面值。默认的浮点类型字面值是double
。
字符和字符串 如果两个相邻的字符串字面值仅由空格,缩进和换行符分割,他们实际是一个整体。
转义序列 形式:\x
后面紧跟一个或者多个十六进制数字,\
后紧跟1-3个八进制数字。无十进制转义序列。
使用前缀或者后缀,可以改变字面值的默认类型(p37 表2.2)。nullptr
是指针字面值。
2-变量
std::string
代表string
是在命名空间std中定义的。
在C++中,初始化和赋值是两个概念。初始化的含义是创建变量时赋予其一个初始值,而赋值的含义是把对象的当前值擦除,以一个新值代替。
列表初始化 初始值存在丢失风险是,编译器报错
int a = {0};
int a{0};一般初始化?
int a(0); int a = 0;默认初始化 定义于任何函数之外的变量被初始化为0。定义于函数内部的内置类型将不被初始化。
分离式编译
C++将声明和定义区分开来。声明使名字为程序所知,一个文件如果想使用别处定义的名字则必须包含对呢个名字的生命。定义负责创建与名字相关联的实体。
如果想声明一个变量而非定义它,在变量名前面添加关键字extern
,而且不要显式初始化。
extern int i; //声明而非定义 int j; //声明且定义, 默认初始化为0
如果多个文件中包含同一个变量,必须将声明和定义分离。声明可以多次,但定义必须只能有一次。
标识符规范
用户自定义的标识符中不能出现连续两个下划线的情况,也不能以下划线紧接着大写字母开头。定义在函数体外的标识符不能以下划线开头。
变量名一般用小写字母, 自定义类名一般以大写字母开头。
名字的作用域
C++大多数作用域以花括号分隔。名字的作用域始于声明的语句,名字所在作用域末端结束。
作者:Gorkr
链接:https://www.jianshu.com/p/bdc0dd5064bc