目录
什么是对象:
通常情况下,对象是指一块能存储数据并且具有某种类型的内存空间。
一些人仅在与类有关的场景下才使用 “对象”这个词。另一些人则已把命名的对象和未命名的对象区分开来,他们把命名了的对象叫做变量。还有一些人把对象和值区分开来,其中对象指能被程序修改的数据,而值(value)指只读的数据。
名字的作用域
不论在程序的什么位置,名字都会指向一个特定的实体:变量、函数、类型等。然而名字出现在程序的不同位置,也可能指向的是不同的实体。
作用域(scope)是程序的一部分,其名字有特定的含义。C++中大多数作用域都用花括号{}分隔。
同一名字在不同作用域中可能指向不同的实体。名字的有效区域始于名字的声明语句,以声明语句所在的作用域末端结束。
名字main定义域所有花括号之外,它和大多数定义在函数体之外的名字一样拥有全局作用域(global scope),一旦声明之后,全局作用域的名字在整个程序的范围内都可以使用。名字若定义于main函数之内,从声明开始直到main结束都可以访问它,但出了main函数就不能了,因此说该变量拥有块作用域(block scope).
作用域可以被嵌套,包含着别的作用域的作用域被称为层作用域。
变量声明和定义的关系
C++支持分离式编译把文件拆成若干个文件,每个文件可被独立编译。
将程序拆成多个文件之后,需要在文件间共享代码的方法。为了支持分离式编译,C++将声明与定义区分开来
声明(declaration)使得名字为程序所知,一个文件如果想使用别处定义的名字则必须包含那个名字的声明。
定义(definition)负责创建与名字关联的实体。
如果想声明一个变量而非引用它,就在变量前添加关键字extern,而且不要显式地初始化变量。
extern int i;//声明i而非定义i。
int i; //声明并定义i
任何包含了显示初始化的声明即成为定义。
变量能且只能被定义一次,但可以被多次声明。
初始化
当对象在创建时获得了一个特定的值,我们说这个对象被初始化了。
注意:初始化并不等同于赋值!!
初始化的含义是创建变量时赋予其一个初始值,而赋值的含义是把对象当前的值擦除,而以一个新值代替。
如果想要初始化一个变量且初始值为0,有以下几种方式:
int a=0;
int a={0};
int a{0};
int a(0);
列表初始化:C++11加入了新东西
即用{}来初始化
这种初始化的好处是:如果使用列表初始化且初始值存在数值丢失的风险时,编译器将报错。
默认初始化
如果定义变量时没有指定初值,则变量被默认初始化,此时变量被赋予了“默认值”。默认值到底是什么由变量的类型决定,同时定义变量的位置也会对此有影响。
如果是内置类型未被显式初始化,它的值由定义的位置决定:
定义在任何函数体之外的变量被初始化为0
而在函数体内部的一般不被初始化
标识符
C++的标识符(identifier)由字母、数字和下划线组成,其中必须以字母或下面的下划线开头。标识符的长度没有限制,但是对大小写很敏感。
同时,C++保留了一些名字供语言本身使用,这些名字不能被用作标识符。此外,定义在函数体之外的标识符不能以下划线开头。
变量命名规范:
1、标识符要能体现实际含义
2、变量名一般用小写字母(因为宏一般要大写)
3、用户自定义的类名一般以大写字母开头
4、如果标识符由多个单词构成,则单词间应有明显区分
C++关键字
C++关键字
alignas continue friend register true
alignof decltype goto reinterpret_cast try asm default if return typedef auto delete inline short typeid bool do int signed typename break double long sizeof union
case dynamic_cast mutable static unsigned catch else namespace static assert using char enum new static_cast virtual char16_t explicit noexcept struct void char32_ t export nullptr switch volatile class extern operator template wchar_t const false private this while constexpr float protected thread_local
const_cast for public throw
C++操作符替代名
and bitand compl not_eq or_eq xor_eq
and_eq bitor not or xor