chapter_02

Tags
变量和基本类型
定义和声明(一个标识符可以声明多次,但是只能定义一次)
定义 : 有赋值号 “=”
声明:出现的原因是为了在本文件中使用在别的文件中出现过的变量,用到关键字 extern; 此处不能用赋值号 ”=“,若用,则是变量的定义
 
引用和指针
  • 引用:在定义时必须进行初始化且一旦初始化其指向不能改变,其本质就是一个别名
  • 指针:指向的是一个对象,它的指向可以改变,建议先有 object 实体, 后定义指针并直接初始化避免出现野指针、悬空指针问题
  • 引用和指针的
    • 区别:
      • 引用不可以改变指向,指针可以;
      • 指针可以作为一个对象,引用其本质是一个别名,它不能被作为一个对象
      • 定义指针时,初始化的值可以是一个地址值;而定义一个引用时,其初始化值必须是一个对象
      • 指针是一种间接访问,引用,我理解为直接访问(待定)
    • 相同
      • 引用和指针的相同点:在定义时都必须做到类型匹配
       
  • void* 的指针可以接收任意类型的指针,常用在函数的返回值类型;不可作为其他操作,因为指针类型不明,其上可以进行的操作没有被指明
符合类型变量
  • 定义风格的选择:1、每行只定义一个变量 2、每行定义多个,此时* &等符号要紧挨变量名
  • 从右往左读:int i = 42; int *p; int *&r = p; r 是一个对指针的引用,所以是一个指针 reference to the pointer,r = &i; *r = 0; 整个的意思是 p 成了指向 i 的指针,并且把 i 的值变成了 0
const 关键字
  • const 必须进行初始化,且初始化的 2 种方式
    • const int i = get_size(); // initialized at run time
    • const int j = 42; // initialized at compile time
  • const 与 & 结合在一起的复合类型:
    • 引用类型的初始化必须匹配,只有两种情况下可以例外
    • 一个常量引用(a reference to const)可以绑定到一个 nonconst 的变量上
    • a reference to const VS a pointer to const
    • const pointers
constexpr 关键字
  • 出现原因:我们常需要用到一些值不会改变的表达式,这些值常在编译时就确定,但是一些操作不能满足,比如用函数进行初始化的值只能在运行时确定,这时我们可以将那个函数用 constexpr 修饰,让它变的足够简单,将它的值提前到编译时确定
  • 赋值要求:对 constexpr 修饰的表达式进行初始化的值必须符合一个条件:不改变
    • 足够简单的字面值可以满足
    • 在一个就是地址不会发生改变的变量(object),即defined outside the fucntion :所以临时变量(函数内定义的变量)不可以初始化 constexpr 表达式
  • 指针和 constexpr 关键字:
    typedef and pointers,const
    • 当把一个指针类型作为一个别名时,他们是一个整体,相当于加了括号,要先解释他们,再加形容词
    auto 标识符:auto 关键字修饰的标识符,编译器会自动帮助我们找到他的类型并进行初始化
     
    decltype 关键字
    • decltype 与auto 的不同之处在于,decltype 只要参数返回的类型,而不要值,连带 top-level const 也一同保存。
    • decltype 的参数可以是一个表达式,不限于是一个object 。
    • decltype() 与 decltype(()) 的区别: decltype(())往往是一个引用。
    头文件卫士
    preprocessor: 预处理器,这是一段工作者编译器之前的代码,他的工作是完成一些值的替换,将#的文件拷贝到其应该在的位置等。由于所有的文件最后都会被集成为一个文件运行,所以如果头文件进行了重复包含,会有很多重定义错误的问题,防止重复包含的方法是添加一个头文件卫士
    • 写头文件卫士最好养成习惯,在所有的头文件中都进行包含,这样便不需要确定文件是否会被重复包含。
     
    Loading...
    Catalog