简单变量
变量名
- 两个下划线,或者下划线开头和大写字母开头的名称,保留给实现。
- 一个下划线的名称被保留给实现,用作全局标识符。
整型
- 宽度(width),用于描述存储整数时使用的内存量。
- C++提供了一种灵活的标准,确保了最小长度:
- short至少16位
- int至少与short一样长
- long至少32位,至少与int一样长
- long long至少64位,至少与long一样长
- 字节的含义依赖于实现
- climits头文件有一些整型限制信息。
- size of
- 返回类型或者变量的长度,单位为字节
- 对类型名,名称放在括号内
sizeof (int)
sizeof var
int wrens(432); //()
int emus{7}; // {}
int reheas = {15}; // = is optional
int rocs = {}; // set rocs to 0
- 无符号类型
- 选择整型类型
- 自然长度(natural size): 计算机处理起来效率最高的长度
- int 通常是最“自然”的长度 (所以有整型提升)
- 1-9开头:十进制,0开头第二位1-7:八进制,0x:十六进制
int x=15645;
cout<<hex;
cout <<x<<endl;
cout<<oct;
cout<<x<<endl;
- std::hex,std::oct
- 如何确定整型常量的类型
- 一般都视为int, 除非有特殊后缀,或者int放不下
- 后缀: u->unsigned int, uL->unsigned long, uLL->unsigned long long, L->long, LL->long long;
- char
- cout.put(), 显示一个字符
- 转义字符可以用代码,八进制,十六进制表示,但是数字表示的与特定编码方式相关,而符号表示适用于任何编码。
- 通用字符名:允许实现提供扩展源字符集和扩展执行字符集。
- u + 八个十六进制位
- U + 十六个十六进制位
- 这两种表示的是ISO 10646码点
- signed char 和 unsigned char
char a; // may be signed, may be unsigned
signed char b; // definitely signed, -128~127
unsigned char c; // definitely unsigned, 0~255
- wcha_t:宽字符类型,可以表示扩展字符集,可以表示系统使用的最大扩展字符集。
- char16_t,char32_t:都是无符号,都有底层类型——一种内置的整型,可能随系统。
- char16_t: 长16位
- char32_t: 长32位
const
浮点类型
- 有效位要求:
- float至少32位
- double至少48位,且不少于float
- long double至少和double一样多
- 头文件cfloat or float.h可以看一些系统限制。
- 常量后缀:
- f or F: float, l or L:long double
- 一般是double
- 有些ANSI C之前的编译器的C++实现不支持f,那就用(float) x, or float(x).
算术运算符
- 两个运算符的优先级相同的时候,看结合性是从左往右还是从右往左
- 仅当两个运算符被用于同一个操作数的时候,优先级和结合性规则才有效
类型转换
- {} 列表初始化
- 不允许缩窄 narrowing
- 看类型 or 常量, ex:
int x=55;
char ch = {x}; //not allowed,虽然55可以放下,但x是个变量,编译器不知道可不可以所以就不给放
- 表达式中
- 整型提升:bool, char, unsigned char, signed char, short都会转成int,如果short比int短,则unsigned short转成int; short and int长度相同的话, ->unsigned int
- wchar_t提升成第一个宽度够的类型,int, unsigned int, long, unsigned long;
- static_cast (value);
- auto
std::vector<double> scores;
std::vector<double>::iterator pv = scores.begin();
// auto pv= scores.begin();
习题
- auto crat=U'U00002155' //char32_t类型