学习笔记_008

来源:互联网 发布:验证码java 编辑:程序博客网 时间:2024/06/08 12:25
  • Windows中文件结束符:Ctrl+Z
  • 对不属于标准库的头文件应用双引号包围
  • 点运算符只能用于类类型的对象
  • 初始化string对象: string book(“小王子”);
  • 初始化不是赋值,初始化是在创建变量时赋予一个初始值,赋值是擦除当前的值

C++初始化:
int a=0;
int a(0);
int a={0};//列表初始化(存在信息丢失风险时将报错)
int a{0};

  • 定义于函数体内的内置类型对象如果没有初始化,则其值未定义
  • 绝大多数类都支持无须显式初始化而定义对象

extern int i ;//声明而非定义i
int j;//声明且定义j
变量只能被定义一次,但可以多次被声明

  • 当第一次使用变量时再定义它,在变量第一次使用的地方附近定义它是一个好的选择
  • 当作用域操作符::左侧为空时,将向全局作用域发出请求
  • 引用只能绑定在对象上,不能和字面值绑定在一起
  • 引用不是对象,没有实际地址,不能定义指向引用的指针,但可以有指向指针的引用

生成空指针的方法:
int *p1=nullptr;//特殊类型字面值
int *p2=0;
int *p3=NULL;//预处理变量

  • void*指针是一种特殊的指针,可以存放任意类型对象的地址,但不能访问地址指向的对象
  • const对象被设定成仅在文件内有效,如果想在多个文件之间共享const对象,就必须添加extern关键字
  • 让一个非常量引用指向一个常量对象,错误
  • 常量引用————————> 对常量的引用
  • 允许为一个常量引用绑定一个非常量的变量,字面量甚至是表达式
  • 引用类型必须与其所引用的对象的类型一致,例外:
    初始化常量引用时(其实当类型不一致,常量引用会被绑定到一个临时量对象上)
  • 常量引用仅对引用可参与的操作做出了限定,但并未规定所引用的对象必须是常量,所以尽管不能通过常量引用来改变其所引用的对象的值,但可以通过其他途径来改变,例如直接改变对象的值
  • 要想存放常量对象的地址,只能使用指向常量的指针
  • 指针的类型必须与其所指向的对象的类型一致,例外:
    可以令指向常量的指针指向一个非常量对象,与常量引用一样,指向常量的指针只是限定了指针可参与的操作,即不能通过指向常量的指针来改变其所指向的对象的值,但同样可以通过其他方法改变

指向常量的指针: const int *ptr;
常量指针: int *const ptr;
指向常量的常量指针: const int *const ptr;

  • 指针本身是一个常量并不意味着不能通过指针改变它所指向的对象的值
  • 用顶层const表示指针本身是一个常量,用底层const表示指针所指向的对象是一个常量
  • 当执行对象的拷贝操作时,顶层const不受影响,但必须具有相同的底层const资格,或者两个对象的数据类型能够相互转化,非常量可以转换成常量,反之则不行
  • 常量表达式是指值不会改变并且在编译过程中就能得到结果的表达式,字面量和用常量表达式初始化的const对象都是常量表达式
  • 声明为constexpr的变量一定是一个常量,并且必须用常量表达式初始化
  • 函数体内定义的变量一般来说都没有存放在一个固定的地址当中,所以不能用constexpr指针指向这样的变量

const int *ptr=nullptr;//ptr是一个指向整型常量的指针
constexpr int *ptr=nullptr;//ptr是一个指向整型变量的常量指针

  • auto一般会忽略掉顶层const,而底层const则会保留下来
  • 最好不要把类的定义和对象的定义放在一起,一会定义类一会定义对象,这是不好的习惯;所以要注意在类定义后加分号。
  • C++11标准规定,可以给数据成员提供一个类内初始值
  • 类通常被定义在头文件中,并且类所在头文件的名字应与类名一致
  • 确保头文件多次包含仍能正常安全工作的技术是预处理器
原创粉丝点击