该博客用于记录自己在阅读过程中不懂的知识点,很少用到但比较重要的知识点以及模棱两可的知识点
extern int j; //声明 j(未定义)
int j; //声明并定义
不能在函数体内部初始化一个extern标记的变量
引用不是变量所以不存在引用的引用
编译器在编译过程中便将所有const变量都替换为了对应的值
默认情况下const便利了仅在文件内有效
当初始化常量引用使用表达式时,要求该表达式能转换成引用的类型,如果发生转化,引用绑定的实际上是一个临时量(引用类型和引用对象类型必须一致的其中一个例外,如果引用不是常量引用的话,对引用的赋值事实上操作的是一个临时量,而不是代码中显式绑定的对象, (指针同理))
*指向常量的指针:类型为const double等,仅仅是不能通过指针修改所指对象的值,对象可以是非常量,用于存放常量对象的地址
*常量指针:例:int *const a,必须初始化且初始化后其存放的地址不能变
指针本身是常量称为顶层const(更一般的,任意对象是常量),指向的对象是常量称为底层const(与引用和指针等复合类型的 基本类型部分 有关)
常量表达式:值不会改变并且编译过程就能确定的值
constexpr类型用于方便编译器验证某值是否三常量表达式
constexpr int a = size();当size()是constexpr类型的函数时成立
使用constexpr的类型必须是字面值类型(算术类型,引用,指针(使用时应初始化为0,nullptr或是存储与固定地址的对象(定义在函数体之外的对象)))
typedef:类型别名
typedef char *pstring; //pstring 是char类型的指针
const pstring a = 0; //因为pstring是指针类型,所以a是一个常量指针,不能想当然的理解为const char* a(指向常量的指针),const是对给定类型的修饰!!!
auto让编译器分析表达式类型,必须有初始值
auto a = b + c;
decltype指示符
decltype((i)) 的结果永远是引用
extern int j; //声明 j(未定义)
int j; //声明并定义
不能在函数体内部初始化一个extern标记的变量
多文件使用同一变量应在一个文件中定义多个文件中声明
引用不是变量所以不存在引用的引用
void 型的指针多是用于承载,而不是用于操作,因为我们不清楚他的类型就无法确定如何操作他
编译器在编译过程中便将所有const变量都替换为了对应的值
默认情况下const便利了仅在文件内有效
非常量引用不能绑定常量对象
引用必须被初始化
当初始化常量引用使用表达式时,要求该表达式能转换成引用的类型,如果发生转化,引用绑定的实际上是一个临时量(引用类型和引用对象类型必须一致的其中一个例外,如果引用不是常量引用的话,对引用的赋值事实上操作的是一个临时量,而不是代码中显式绑定的对象, (指针同理))
*指向常量的指针:类型为const double等,仅仅是不能通过指针修改所指对象的值,对象可以是非常量,用于存放常量对象的地址
*常量指针:例:int *const a,必须初始化且初始化后其存放的地址不能变
指针本身是常量称为顶层const(更一般的,任意对象是常量),指向的对象是常量称为底层const(与引用和指针等复合类型的 基本类型部分 有关)
常量表达式:值不会改变并且编译过程就能确定的值
constexpr类型用于方便编译器验证某值是否三常量表达式
constexpr int a = size();当size()是constexpr类型的函数时成立
使用constexpr的类型必须是字面值类型(算术类型,引用,指针(使用时应初始化为0,nullptr或是存储与固定地址的对象(定义在函数体之外的对象)))
typedef:类型别名
typedef char *pstring; //pstring 是char类型的指针
const pstring a = 0; //因为pstring是指针类型,所以a是一个常量指针,不能想当然的理解为const char* a(指向常量的指针),const是对给定类型的修饰!!!
auto让编译器分析表达式类型,必须有初始值
auto a = b + c;
decltype指示符
decltype((i)) 的结果永远是引用