C++ Primer第五版之(一)基础

  1. 文件包含
    ①预处理器确保头文件多次包含能安全工作,使用头文件保护符,#pragma once
    ②头文件不应包含using声明。

  2. 输入输出流
    ①操纵符endl结束当前行,将设备关联缓冲区的内容刷到设备中。
    ②缓冲刷新操作保证目前为止程序产生的所有输出都真正写入到输出流,而不是停留在内存中等待写入流。

  3. 初始化和赋值是两个不同的操作,初始化:创建变量时赋予一个初始值,赋值:擦除对象当前值,以新值替代。
    ①C++11新标准下使用{ }列表初始化,( )调用构造函数初始化。
    ②如果定义变量时没有指定初始值,则变量默认初始化。
    ③默认初始值由变量类型决定,也由位置决定。
    ④内置类型变量定义于函数体之外默认初始化为0,定义于函数体内部不被初始化。
    ⑤引用必须初始化,顶层const变量必须初始化。

  4. 声明和定义
    ①分离式编绎,声明与定义分开,声明规定变量的类型和名字,定义申请空间并可能为变量赋初始值。
    ②变量只可定义一次,可声明多次。
    ③多次声明时,在变量名前添加关键字extern,不要显式初始化,显式初始化即成定义,抵消extern作用。
    ④C++是一种静态类型语言,在编绎阶段检查类型。

  5. 类型别名
    ①typedef声明和using别名声明。
    ②使用类型别名指代复合类型,别名为一种数据类型,如typedef声明一个数据类型为char的指针时,该别名声明变量时数据类型为指针。

引用和指针

  1. 引用非对象,是已经存在对象的别名。
    ①将引用与初始对象绑定,而不是将初始值拷贝给引用。
    ②引用无法重新绑定到另外一个对象,因此引用必须初始化。

  2. 指针同样实现对其他对象的间接访问,但指针本身也是一个对象。
    ①允许对指针赋值和拷贝,指针也无需在定义时赋初值。
    ②C++11中使用字面值nullptr初始化指针为空指针,它可被转化成任意其他指针类型。
    ③解引用是取地址内所存地址的内容,拷贝是给指针赋值,访问是对指针本身操作。

  3. 指针值(地址)必属4种状态之一:
    ①指向一个对象。
    ②指向紧邻对象所占空间的下一个位置(迭代器中尾后指针,不可解引用)。
    ③空指针,指针没有指向任何对象(不可解引用)。
    ④无效指针,上述情况之外的其他值(不可拷贝和访问无效指针)。

  4. 不可直接操作void*指针,不知道对象的类型,无法确定能在对象上做哪些操作。

  5. 引用本身不是一个对象,不能定义指向引用的指针,但存在对指针的引用。

int i;
int *p;
int *&r  =  p;    //r是对指针的引用
r  =  &i;         //r引用了一个指针,给r赋值&i即令P指向i
*r = 0;           //解引用r得到i,将i值改为0;

const限定符

const int i = get_size();    //运行时初始化
const int j = 42;            //编绎时初始化
  1. 默认状态下,const对象设定仅在文件内有效。
    ①需要多文件共享时,在声明和定义时都添加extern关键字。
    ②顶层const表对象是常量,如算术类型(基本内置类型)、类、指针。
    ③底层const与指针和引用复合类型有关,指针可以是顶层const也可以是底层const,引用只能是底层const(常量引用)。
    ④内置类型:bool /char /wchar_t /char16_t /char32_t /short /int /long /long long /float /double /long double

  2. const引用(常量引用)允许初始化为任意表达式。
    ①常量引用可绑定到非常量的对象、字面值、一般表达式,表达式的结果可转换成引用的类型即可。
    ②编绎器为字面值和一般表达式(结果类型转换后的值)提供空间暂存,称临时量。
    ③常量引用可绑定到临时量对象上,非常量引用不可,不可给临时量赋值。

  3. 复合类型执行拷贝时需具有相同的底层const,顶层const无影响。
    ①基本执行的是指针及引用的初始化和赋值操作。
    ②执行拷入拷出的对象必须具有相同的底层const,或者可以非常量转换成常量。

constexpr和常量表达式

  1. 在编绎过程即得到计算结果且值不会改变的表达式为常量表达式。
    ①C++11可将变量声明为constexpr类型,用常量表达式初始化。
    ②字面值类型(算术类型、引用、指针)可被定义为constexpr,其他(自定义类、IO库、string)不可。
    ③用常量表达式初始化的const对象也是常量表达式。
    ④constexpr指针初始值必须是nullptr或者0,或者存储于固定地址中的对象,限定符仅对指针有效,与所指对象无关。
    ⑤函数体内定义的变量不存放在固定地址,constexpt指针不可指向这样的变量;定义于所有函数体之外的对象地址固定不变,函数体内局部静态变量同样有固定地址,可用来初始化constexpr指针。

  2. constexpr函数
    ①函数的返回类型及所有形参类型都必须是字面值类型。
    ②函数体有且仅有一条return语句。
    ③constexpr函数不一定返回常量表达式。
    ④例:形参为字面值类型,a当实参为常量表达式时,函数返回常量表达式,函数返回可为常量表达式赋值;b当用非常量表达式调用constexpr函数,返回值为非常量表达式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值