C++ primer 阅读笔记------------变量

来源:互联网 发布:java会议管理系统 编辑:程序博客网 时间:2024/06/08 00:58
该博客用于记录自己在阅读过程中不懂的知识点,很少用到但比较重要的知识点以及模棱两可的知识点
extern int j;  //声明 j(未定义)
int j;           //声明并定义
不能在函数体内部初始化一个extern标记的变量

多文件使用同一变量应在一个文件中定义多个文件中声明


不能把int型变量直接赋给指针变量
引用不是变量所以不存在引用的引用

void 型的指针多是用于承载,而不是用于操作,因为我们不清楚他的类型就无法确定如何操作他


**const(对给定类型的修饰!!!)
    编译器在编译过程中便将所有const变量都替换为了对应的值
    默认情况下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)) 的结果永远是引用