(2018/01/29 20:23)
- C++基本数据类型分为 算术类型 和 空类型,算数类型又分为 整型(包括字符和布尔类型在内) 和 浮点型。
- 字由4字节或8字节组成。
- 如何选择数据类型:
- 当明确知道熟知不可能为负时,选择无符号类型;
- 使用int执行整数运算;
- 在算术表达式中不要使用char或bool;
- 执行浮点数运算时选用double,因为float精度不够且两者的计算代价相差无几。
- 当一个算术表达式中既有无符号数又有int值时,int值会转换成为无符号数。
- 如果表达式里既有带符号类型又有无符号类型,当带符号类型取值为负时会出现异常结果(带符号数会自动转换为无符号数)。
- 以0开头的整数代表八进制数。
- 字面值类型:
- 十进制字面值的类型是能容纳其数值的int、long和long long中尺寸最小的那个;
- 八进制和十六进制字面值的类型是能容纳其数值的int、unsigned int、long、unsigned long、long long和unsigned long long中
- 尺寸最小的那个;
- 类型short没有对应的字面值;
- 默认的,浮点型字面值是一个double;
- “Hello” “World”位置紧邻仅由空格、缩进和换行符分割的两个字符串,在他们实际上一个整体的字符串。
- (C++11)列表初始化:int a = {3.14}; (用花括号括起来)
相比于int a(3.14)和int a 3.14; 当用于内置类型时,如果我们使用列表初始化且初始值存在丢失信息的风险,则编译器会报错。
- 定义于任何函数之外的内置类型的变量,若未被显示初始化,其会被自动初始化为0;
定义在函数体内部的内置类型变量将不被自动初始化。
- C++支持分离式编译机制,该机制允许将程序分割为多个文件,每个文件可被独立编译。
- C++是一种静态类型语言,其含义是在编译阶段检查类型。此过程称为类型检查。
- 变量名命名规范
- 用户自定义的标识符中不能两虚出现两个下划线,不能以下划线紧接大写字母开都。此外,定义在函数体外的标识符不能以
下划线开头。=》自定义标识符不以下划线开头;
- 变量名一般用小写字母,对于多单词,采用头分法,studentLoan;
- 自定义的类名一般以大写字母开头。
- 函数内部不宜定义与全局变量同名的新变量,在函数作用域内,局部变量会同名覆盖全局变量。
- 函数内部可以显示访问同名全局变量,使用 ::name
- 引用:
- 给变量起别名;
- 引用必须被初始化;
- 引用的类型要和与之绑定的对象严格匹配;
- 对const的引用,前面要加const;const int a; const int &b = a。
- 指针:
- NULL == 0; (C++11)最好用nullptr来初始化指针,nullptr可以被转化为u任意其他指针类型;
- 注意野指针;
- 任何非0指针对应的条件值都是true;
- 以void*的视角来看内存据仅仅是内存空间,没法访问内存空间中所存的对象。
- 理解复合声明:右左法则
- int *p1, p2; //p1是指针,p2是int;
- int *&r = p; //r是对 int*型指针p 的引用。
- const限定符:
- const对象仅在当前文件内有效,多个文件中同名的const变量,其实等同于不同文件分别定义的独立变量;
- 如果想在多个文件间共享const对象,必须在变量的定义和声明前都加extern关键字;
- 对const的引用,前面要加const;const int a; const int &b = a。
- 指针和const:
- const int *p = &a;//指向const int a的指针p;
- int *const p = &a;//指向int a的常指针const p
- 顶层const和底层const:
- (这部分自行看C++ Prime)
- 当执行对象的拷贝操作时,拷入和拷出的对象必须具有相同的底层const资格
- constexpr和表达式:
- 声明为constexpr的变量是一个常量,而且必须用常量表达式初始化。
- 指针和constexpr:
- 在constexpr声明中如果定义了一个指针,限定符constexpr仅对指针有效,与指针指向的对象无关。
- const int *p = nullptr; //p是一个指向整型常量的指针
- constexpr int *q = nullptr; //q是一个指向整数的常量指针
- 在constexpr声明中如果定义了一个指针,限定符constexpr仅对指针有效,与指针指向的对象无关。
- 类型别名:
- typedef int Base; //base是int的近义词
- C++11中的别名声明:using Base = int;
- auto类型说明符:(C++11)
- auto定义的变量必须有初始值;
- auto在一条语句中声明多个变量,因为一条语句只能有一个基本数据类型,所以该语句中所有变量的初始基本数据类型相
同。
- auto i = 0, *p = &i; //正确:i是整数、p是整形指针
- auto sz =0, pi = 3.14; //错误:sz和pi的类型不一致
- int i = 0, &r = i;
auto a = r; //a是一个整数
auto a = &i; //a是一个整形指针
- auto自动忽略顶层const
const int ci = i;
auto b = i; //b是一个int(忽略顶层const)
- decltype类型指示符:(C++11)
- decltype可以在不初始化变量的前提下推断出表达式的类型;decltype(f1()) a;
- decltype返回该变量的类型(包括顶层const和引用在内);
- 引用从来都作为其所指对象的同义词出现,只有用在decltype处是一个例外。
- decltype((变量))的结果永远是引用
- 类体由花括号包围形成了一个新的作用域
- 预处理概述
- #include是一项预处理功能,预处理器头文件内容替换#include;
- 用头文件保护符(#ifdef #ifndef #endif)有效防止头文件重复包含造成的重定义。