int跟short长度都至少为16位,long至少为32位,long long至少为64位。
无符号类型可以表示正数和0,将其转为二进制码时所有位数均为数字位。
有符号类型可以表示正数、负数和0,将其转为二进制码时最高位要存符号位,1为正数,0为负数。
float为单精度浮点数,精度7位。double为双精度浮点数,精度16位。执行浮点数运算一般选用double,因为double精度更高,且计算代价与float相差无几。
double
当从无符号数中减去一个值时,必须保证结果不为负数,如果为负数,机器会取模。
int month = 09, day = 07;
为八进制整数。
(a)不能在输入的时候才定义。
(b)列表初始化,i被隐式的强制转换为3
(c)wage未定义
(d)i被隐式的强制转换为3
global_int = 0;
global_str = “”;
local_int未确定
local_str在类std中,由std决定为空字符串
默认初始化
(1)定义于任何函数体之外的变量被初始化为0
(2)定义在函数体内部的内置类型变量将不被初始化,其值为未确定。
(3)每个类自己决定其初始化对象的方式
定义 定义 声明
标识符由字母、数字、下划线组成,必须由字母或下划线开头,对大小写敏感。
(a)错误,不能用double作变量名
(b)正确
(c)错误,有无效字符
(d)错误,不能由字母开头
(e)正确
j = 100
合法,但最好程序中不要出现同名变量
输出 100 45
(b)错误,引用类型的初始值必须是一个对象。
(d)错误,引用类型必须初始化。
(a)合法,d = 3.14159
(b)合法, r2 = 0;
(c)合法,i = 0;
(d)合法, r1 = 0;
10 10
指针本身是一个对象,允许对指针进行赋值和拷贝。且指针无需在定义时赋值。
引用并非是一个对象,只是为一个已经存在的对象起另外一个名字。在定义时必须初始化。
这段代码定义了一个整型i = 42,定义一个指针p指向i所在的地址,第三行将i赋值为42 * 42;
(a)不合法,引用的类型要跟被引用类型一致。
(b)不合法,类型不匹配
(c)合法
(a)判断p是否时空指针
(b)判断p所指对象是否为0
不能,无法确定指针是否合法()
lp类型不匹配
void定义了一个空指针,可以指向任意对象的地址。
(a)ip为int类型指针,i为int型变量, r为int型引用
(b)i为int型变量,ip为空指针
(c)ip为int型指针,ip2为int型变量
(a)不合法,const必须初始化为常量
(d)不合法,sz是一个const类型,不能被改变
(a)不合法,r必须引用一个对象
(b)合法,p2为常量指针,指向i2所在的地址
(c)合法,此时r为一个常量的引用。(注意const int &i 与int &i的区别)
(d)合法,p3是一个指向常量的常量指针,指向i2的地址
(e)合法,p1是一个指向常量的指针
(f)不合法,必须初始化
(g)合法
(a)~(d)不合法,都存在没有初始化的问题
(e)合法
(a)合法
(b)不合法,类型不一致
(c)不合法,类型不一致
(d)不合法,常量指针const不能被二次赋值
(e)不合法,常量指针const不能被二次赋值
(f)不合法,常量const 不能被二次赋值
v2顶层const, p2底层const, p3即是顶层const又是底层const, r2底层const
顶层const的拷贝不受限制,但是底层const的拷贝的对象必须具有相同的底层const资格。一般来说:非常量可以赋值给常量,反之则不行
合法
不合法,p2是底层const, p1是非常量
合法
不合法,p3既是顶层又是底层。
合法
类型不符合
改为:
int null = 0, *p = &null;//p指向null所在的地址
a = 42;
b = 42;
c = 42;
非法,d是整型指针,不能给他赋值常数
非法,e是指向常量的指针
非法,g是常量的引用
j:int(auto会忽略顶层const, 保留底层const)
k:const int &
p:const int *
j2:const int
k2:const int &
a = 4
b = 4
c:int c = 4
d:int & d = 4
a = 3
b = 4
c:int c = 3
d:int & d = 4
auto 和 decltype的区别主要有三个方面:
第一,auto类型说明符用编译器计算变量的初始值来推断其类型,而decltype虽然也让编译器分析表达式并得到它的类型,但是不实际计算表达式的值。
第二,编译器推断出来的auto类型有时候和初始值的类型并不完全一样,编译器会适当地改变结果类型使其更符合初始化规则。例如,auto一般会忽略掉顶层const,而把底层const留下来。与之相反,decltype会保留变量的顶层const。
第三,与auto不同,decltype的结果类型与表达式形式密切相关,如果变量名加上了一对括号,则得到的类型与不加括号时会有不同。如果decltype使用的是一个不加括号的变量,则得到的结果就是该变量的类型;如果给变量加上了一层或多层括号,则编译器将推断得到引用类型。