31.符号表的概念:
(1)符号表是编译器在编译过程中产生的关于源程序中语法符号的数据结构。
(2)符号表是编译器自用的内部数据结构。
(3)符号表不会进入最终产生的可执行程序中。
32.只有用字面量初始化的const常量才会进入符号表:
(1)对const常量引用会导致编译器为其分配空间。
(2)虽然const常量被分配了空间,但是这个空间中的值不会被使用。
(3)使用其他变量初始化的const常量仍然是只读变量。
被volatile修饰的const常量不会进入符号表,退化为只读变量,每次访问都从内存中取值。
const引用的类型与初始化变量的类型相同时,使初始化变量成为只读变量,不同时,生成一个新的只读变量,其初始值与初始化变量相同。
在编译期间不能直接确定初始值的const变量,都被作为只读变量处理。
33.指针与引用的区别:
(1)指针是一个变量,其值为一个内存地址,通过指针可以访问对应内存地址中的值。
(2)引用只是一个变量的新名字,所有对引用的操作(赋值,取地址等)都会传递到其引用的变量上。
(3)指针可以被const修饰成为常量或者只读变量。
(4)const引用使其引用的变量具有只读属性。
(5)指针就是变量,不需要初始化,也可以指向不同的地址。
(6)引用必须在定义时初始化,之后无法在引用其他变量。
34.当引用字面量对变量进行初始化或赋值时:
(1)无溢出产生:编译器对字面量进行默认类型转换。
(2)产生溢出:编译器会做截断操作,并产生警告。
35.深入理解extern”C“:
extern“C”告诉C++编译器将其中的代码进行C方式编译。
(1)C方式的编译主要指按照C语言的规则对函数名进行编译。
(2)函数名经过编译后可能与源码中的名字有所不同。
(3)C++编译器为了支持重载,函数名经过编译后会加上参数信息,因而编译后与源码完全不同。
(4)C编译器不会在编译后的函数名中加上参数信息。
extern“C”中的重载函数经过C方式编译后将得到相同的函数名,因此extern“C”中不允许重载函数,但extern“C”中的函数可以与extern“C”之外的函数重载。
36.C++中的布尔类型:
(1)C++在C语言基本类型系统之上增加了bool。
(2)C++中的bool可取值只有true和false。
(3)理论上bool只占用一个字节,但当多个变量定义在一起时,可能会各占一个bit,这取决于编译器。
注意:true代表真值,编译器内部用1表示。
false代表非真值,编译器内部用0表示。
37.C语言中的三目运算符返回的是变量值,不能作为左值使用。
C++中的三目运算符可直接返回变量本身,因此可以出现在程序的任何地方。
注意:三目运算符可能返回的值中如果有一个是常量值,则不能作为左值用。
38.C++中新增了引用的概念:
(1)引用可以看作一个已定义变量的别名。
(2)引用的语法:Type & name = var。
(3)普通引用在声明时必须用其他变量进行初始化。
(4)引用作为函数参数声明时不进行初始化。
39.const引用:
(1)在C++中可以声明const引用。
(2)const Type &name = var。
(3)const引用让变量拥有只读属性。
(4)使用变量对const引用初始化后将生成一个只读变量。
(5)C++中引用的本质是一个指针常量。
40.当函数返回值为引用时:
(1)若返回栈变量即局部变量,不能成为其他引用的初始值,不能作为左值引用。
(2)若返回静态变量或全局变量,可以成为其他引用的初始值,即可作为右值使用,也可作为左值使用。