美文网首页
C++基础(关键字二)

C++基础(关键字二)

作者: 星辰照耀你我 | 来源:发表于2019-10-19 20:29 被阅读0次

要对有些复杂的关键字有所理解,还是需要对C++有着更深入的了解。

11.const、volatile、mutable关键字

  • const在C++中用来修饰限定,当修饰普通变量时,被修饰的对象将不可改变,const int a;表示变量a将不可以被修改,编译器会执行这个约束,保证在之后的代码中将没有操作对其修改。
    但修饰的变量是局部变量时,有时候会存在被其他方式改变的情况(例如指针赋值的情况),这时局部变量的值仍然被改变了,例如下面的代码:

    const
    这也说明虽然*p也就是a的值已经被改变,但是输出却是错误的。我们要输出真实的a的值,还需要加一个关键字volatile,这个关键字可以提醒编译器每次读取变量值的时候都去内存中读取真实的值。当我们加上时,可以看到输出变成了下图所示:
    volatile
  • 在修饰指针类型的变量时,const写在不同的位置有着不同的作用。
    (1)const int* p; //指针p地址中的内容是常量,不可改变。
    (2)int* const p;//指针p本身是一个常量,内容不可改变。
    (3)const int* const p; //指针本身和地址中的内容都是常量,都不可以改变。
    总之,const修饰靠近他的变量,或是指针的指向,或是指针本身。

  • 当const修饰函数参数时,传递的参数是值而不是地址时,无论怎么样都不会改变原来的变量值,所以此时不需要const关键字,但传递参数是一个指针时,与前面说的const修饰指针的用法相同,保证修饰的内容不变。传递的参数是引用时,需要保证这个引用指向的对象不改变,所以要使用上面的第一种修饰方式。

  • 当修饰类的成员变量时,这个成员只能在初始化时赋值,不会在类中被改变。当修饰整个类定义的变量的时候,表示整个类成员不被改变,但此时有一个关键字mutable就是为了突破const的限制,即使定义类变量的时候会修饰为const,但由于成员中mutable的修饰,这个成员变量仍然可以被改变。

12.extern关键字
extern一般使用在全局变量在外部被使用时候的声明,当定义与使用不在同一个文件中时需要将其声明,extern int i;

13.new/delete关键字
new/delete本质上还是调用了malloc和free,但与malloc和free又有着许多的不同。
C++中new/delete主要用于动态创建和释放对象,他可以在new时自动调用构造函数,delete时自动调用析构函数,比起malloc/free来后者只能动态申请和释放空间。

new/delete和malloc/free

  • malloc/free需要库文件stdlib.h支持,而new/delete不需要。
  • new能调用构造函数,而malloc不会;delete将调用析构函数,而free不会。
  • new能够自动计算需要分配的内存空间,不需要自己去指定,而malloc需要用户自己指定所需的空间大小。例如,int* p1 = new int[2]; int * p2 = malloc(2*sizeof(int));
  • new与delete直接得到具体类型的指针,malloc与free返回void类型的指针。
  • new一般由两步构成,分别是new操作和构造。首先分配到内存,再调用具体的构造函数完成操作。
  • new在申请单个类型变量时可以进行初始化,malloc不具备内存初始化的特性。

相关文章

  • C++基础(关键字二)

    要对有些复杂的关键字有所理解,还是需要对C++有着更深入的了解。 11.const、volatile、mutabl...

  • 2022-06-21

    C++入门基础知识 一、C++中总计有63个关键字: 其中画圈的是C语言的关键字。这里要注意了:false和tru...

  • C++中容易被忽略的基础知识

    const和define的区别C++中static关键字的总结C++中的构造函数及深拷贝浅拷贝c++基础之引用和指...

  • C++面向对象基础(二)

    目录 C++ 基础(一) C++面向对象基础(二) 一、类 C++ 中可以使用 struct、class 来定义一...

  • Boolan - C++学习笔记 _STL - 第三周

    STL与泛型编程(三)阅读C++ STKL源码的基础条件1 操作符重载operator是C++的关键字,它和运算符...

  • C++ 基础(一)

    目录 C++ 基础(一) C++面向对象基础(二) 前言 自工作以来接触了 OC、Swift、RN、C 语言,简单...

  • C语言和C++的区别到底有多少?不要再傻傻分不清楚了

    1、关键字 蓝色标注为C语言关键字,C++继承了C语言的所有关键字,以下红色标注为C++中含有但C语言没有的关键字...

  • c++第一讲

    目标 c++关键字 命名空间 c++输入和输出 缺省参数 函数重载 引用 内联 auto关键字 基于范围的for循...

  • C++基础(关键字一)

    C++中的关键字 关键字是系统预留的、具有特殊意义的单词,一般不允许用户作为变量名来使用,常见的关键字除如if、e...

  • C++学习笔记目录

    C++初步 C++数据长度 C/C++ 堆 栈 静态 常量 代码 区 static关键字 C++类和对象 C++引...

网友评论

      本文标题:C++基础(关键字二)

      本文链接:https://www.haomeiwen.com/subject/pvsnmctx.html