C++Primer学习笔记(一)变量
变量是提供了程序可以操作的有名字的存储区。C++ 中的每一个变量都有特定的类型,该类型决定了变量的内存大小和布局、能够存储于该内存中的值的取值范围以及可应用在该变量上的操作集。C++ 程序员常常把变量称为“变量”或“对象(object)”。
对象就是内存中具有类型的区域。说得更具体一些,计算左值表达式就会产生对象。
术语对象:用于描述变量或类类型的值。
变量名,即变量的标识符,可以由字母、数字和下划线组成。变量名必须以字母或下划线开头,并且区分大小写字母:C++ 中的标识符都是大小写敏感的。
C++ 关键字
asm do if return try
auto double inline short typedef
bool dynamic_cast int signed typeid
break else long sizeof typename
case enum mutable static union
catch explicit namespace static_cast unsigned
char export new struct using
class extern operator switch virtual
const false private template void
const_cast float protected this volatile
continue for public throw wchar_t
default friend register true while
delete goto reinterpret_cast
C++ 还保留了一些词用作各种操作符的替代名。这些替代名用于支持某些不支持标准C++操作符号集的字符集。
C++ 操作符替代名
and bitand not_eq or_eq xor_eq
and_eq bitor not or xor
C++ 标准还保留了一组标识符用于标准库。标识符不能包含两个连续的下划线,也不能以下划线开头后面紧跟一个大写字母。有些标识符(在函数外定义的标识符)不能以下划线开头。
变量命名有许多被普遍接受的习惯,遵循这些习惯可以提高程序的可读性。
• 变量名一般用小写字母。例如,通常会写成 index,而不写成 Index 或INDEX。
• 标识符应使用能帮助记忆的名字,也就是说,能够提示其在程序中的用法的名字,如 on_loan 或 salary。
• 包含多个词的标识符书写为在每个词之间添加一个下划线,或者每个内嵌的词的第一个字母都大写。例如通常会写成 student_loan 或studentLoan,而不写成 studentloan。
定义对象
如:intunits_sold;
-以类型名开始 +标识符+;
-以分号结束定义
初始化
-两种初始化变量的形式:复制初始化和直接初始化。
如:int ival(1024);-直接初始化
Int ival=1024; -复制初始化
有多个初始化式时不能使用复制初始化。
-注意:C++中初始化和赋值是两种不同操作
初始化多个变量
当一个定义中定义了两个以上变量的时候,每个变量都可能有自己的初始化式。 对象的名字立即变成可见,所以可以用同一个定义中前面已定义变量的值初始化后面的变量。已初始化变量和未初始化变量可以在同一个定义中定义。两种形式的初始化文法可以相互混合。
内置类型变量是否自动初始化取决于变量定义的位置。在函数体外定义的变量都初始化成 0,在函数体里定义的内置类型变量不进行自动初始化。除了用作赋值操作符的左操作数,未初始化变量用作任何其他用途都是没有定义的。
声明和定义
-变量的定义(definition)用于为变量分配存储空间,还可以为变量指定初始值。在一个程序中,有且只仅有一个定义。
-声明(declaration)用于向程序表明变量的类型和名字。
-定义也是声明:当定义变量时我们声明了它的类型和名字。
-不定义变量的声明包括对象名、对象类型和对象类型前关键字extern:
-如,extern int i;声明了变量名i并不定义它。
-extern声明不是定义,也不分配空间。
-只有当声明也是定义是,声明才可以有初始化式,因为只有定义才能分配存储空间。
名字作用域
用来区分名字的不同意义的上下文称为作用域
-局部变量:函数内部定义,还有语句作用域
-全局变量:函数外变量
定义在全局作用域中的名字可以在局部作用域中使用,定义在全局作用域中的名字和定义在函数的局部作用域中的名字可以在语句作用域中使用
const限定符
-const是关键字,用来定义常变量,即把一个对象转换成一个常量。
-注解:因为常量再定义后就不能被修改,所以定义时必须初始化。
-通过指定const变量为extern,就可以在整个程序中访问const对象,否则const变量只能是局部变量。
-注解:非const变量默认为extern,要使const变量能够在其他的文件中访问,必须显式地指定它为extern。
引用
-重要概念:引用只是对象的另一个名字。
-是一种复合类型(compound type),添加“&”来定义
-引用必须用于该引用同类型的对象初始化:
int ival=1024;
int &refval=ival;
关于const引用
-const引用是指向const的引用
如:const intival=1024;
const int&refval=ival; 可以读取但不能修改refval,
-const引用可以初始化为不同类型的对象或者初始化为右值。
-注解:非const引用只能绑定到与该引用同类型的对象。
const引用则可以绑定到不同但相关的类型的对象或绑定到右值。