C++基础知识面试必备、复习细节 (9) {enum new union extern}

本文详细介绍了C++中的new和delete操作,包括内存分配和对象构造过程。接着讨论了enum枚举类型及其增强程序可读性的优点。还探讨了union如何在不同时间存储一个成员,以及volatile关键字和extern "C"链接指引在C++中的作用,特别是它们如何影响代码的可移植性和与C代码的交互。
摘要由CSDN通过智能技术生成

C++基础知识面试必备、复习细节 (9) {enum new union extern}

new和delete
  • new表达式三步操作:
    • new调用一个名为operator new(或operator new[])的标准库函数,该函数分配一块足够大的、原始的、未命名的内存空间以便存储特定类型的对象(或者对象的数组)
    • 编译器运行相应的构造函数以构造这些对象,并传入初值
    • 对方被分配空间并构造完成后,返回一个指向该对象的指针
  • delete表达式两步操作:
    • 对所指的对象或者所指的对象数组中的元素执行对应的析构函数
    • 编译器调用operator delete(或operator delete[])的标准库函数释放内存空间
枚举类型enum
  • 枚举类型中的元素具有默认值,默认为0,1,2…

  • 枚举元素按照常量处理,但不能对其赋常量值

  • enum <类型名> {<枚举常量表>};
    enum color {RED,YELLOW,GREEN};
    color a=RED;  //a被赋值为RED
    enum weekday{SUN=7,MON=1,TUE,WED,THU,FRI,SAT};
    
  • 使用enum主要是当某些变量具有固定的几个可选值时,通过枚举可以增强程序的可读性,减少犯错概率

联合union
  • union是一种特殊的类,可以有多个数据成员,但是在任意时刻只有一个数据成员有值

  • 因此union的存储空间(即sizeof大小)是其最大的数据成员的存储空间。所有变量的起始地址相同,因此当修改时等于是一个覆盖。

  • union Token {
            char cval;
            int ival;
            double dval;
        };
        Token first_token = {'a'};
        Token second_token = {2};
        if(first_token.cval=='a')
            cout << "true" << endl;
    //cout:  true
    
c++不可移植性
  • volatile限定符:当对象的值可能在程序的控制或检测以外被改变时,应该将对象声明为volatile,关键字volatile告诉编译器不应该对作用的对象进行优化

  • extern “C” 链接指引:

    • extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码。加上extern "C"后,会指示编译器这部分代码按C语言(而不是C++)的方式进行编译。由于C++支持函数重载,因此编译器编译函数的过程中会将函数的参数类型也加到编译后的代码中,而不仅仅是函数名

    • 通常用于:C++代码调用C语言代码 或 在C++的头文件中使用

    • 被extern "C"修饰的变量和函数是按照C语言方式进行编译和链接的

    • extern "C" size_t strlen(const char *);
      extern "C" {
      	//some C code
      };
      extern "C"{
          #include<string.h> //c头文件
      }
      
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值