inline 内联函数的特征

  • 相当于把内联函数里面的内容写在调用内联函数处;

  • 相当于不用执行进入函数的步骤,直接执行函数体;

  • 相当于宏,却比宏多了类型检查,真正具有函数特性;

  • 编译器一般不内联包含循环、递归、switch 等复杂操作的内联函数;

  • 在类声明中定义的函数,除了虚函数的其他函数都会自动隐式地当成内联函数。

优点
内联函数同宏函数一样将在被调用处进行代码展开,省去了参数压栈、栈帧开辟与回收,结果返回等,从而提高程序运行速度。内联函数相比宏函数来说,在代码展开时,会做安全检查或自动类型转换(同普通函数),而宏定义则不会。在类中声明同时定义的成员函数,自动转化为内联函数,因此内联函数可以访问类的成员变量,宏定义则不能。内联函数在运行时可调试,而宏定义不可以。

缺点
代码膨胀。内联是以代码膨胀(复制)为代价,消除函数调用带来的开销。如果执行函数体内代码的时间,相比于函数调用的开销较大,那么效率的收获会很少。另一方面,每一处内联函数的调用都要复制代码,将使程序的总代码量增大,消耗更多的内存空间。inline 函数无法随着函数库升级而升级。inline函数的改变需要重新编译,不像 non-inline 可以直接链接。是否内联,程序员不可控。内联函数只是对编译器的建议,是否对函数内联,决定权在于编译器。

volatile 作用

比如:volatile int i = 10;
1,volatile 关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素(操作系统、硬件、其它线程等)更改。所以使用 volatile 告诉编译器不应对这样的对象进行优化。,

2,volatile 关键字声明的变量,每次访问时都必须从内存中取出值(没有被 volatile 修饰的变量,可能由于编译器的优化,从 CPU 寄存器中取值)
3,const 可以是 volatile (如只读的状态寄存器)

4,指针可以是 volatile

sizeof()
sizeof 对数组,得到整个数组所占空间大小。
sizeof 对指针,得到指针本身所占空间大小。
#pragma pack(n)
设定结构体、联合以及类成员变量以 n 字节方式对齐

extern "C"
被 extern 限定的函数或变量是 extern 类型的
被 extern "C" 修饰的变量和函数是按照 C 语言方式编译和链接的
extern "C" 的作用是让 C 编译器将 extern "C" 声明的代码当作 C 语言代码处理,可以避免 C 因符号修饰导致代码不能和C语言库中的符号进行链接的问题。

C 中 struct 和 class

总的来说,struct 更适合看成是一个数据结构的实现体,class 更适合看成是一个对象的实现体。

区别
最本质的一个区别就是默认的访问控制。默认的继承访问权限。struct 是 public 的,class 是 private 的。
struct 作为数据结构的实现体,它默认的数据访问控制是 public 的,而 class 作为对象的实现体,它默认的成员变量访问控制是 private 的。

union 联合
联合(union)是一种节省空间的特殊的类,一个 union 可以有多个数据成员,但是在任意时刻只有一个数据成员可以有值。当某个成员被赋值后其他成员变为未定义状态。联合有如下特点:
      默认访问控制符为 public
      可以含有构造函数、析构函数
     不能含有引用类型的成员
     不能继承自其他类,不能作为基类
     不能含有虚函数
     匿名 union 在定义所在作用域可直接访问 union 成员
     匿名 union 不能包含 protected 成员或 private 成员
     全局匿名联合必须是静态(static)的

声明:

本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。

C 常见的面试知识点(下)相关推荐

  1. 超全超详细,常见SQL 面试知识点汇总

    SQL是用于数据分析和数据处理的最重要的编程语言之一, 因此与数据科学相关的工作(例如数据分析师.数据科学家和数据工程师)在面试时总会问到关于 SQL 的问题. SQL面试问题旨在评估应聘者的技术和解 ...

  2. C 常见的面试知识点(上)

    const 作用 1,修饰变量,说明该变量不可以被改变 2,修饰指针,分为指向常量的指针(pointer to const)和自身是常量的指针(常量指针,const pointer) 3,修饰引用,指 ...

  3. 面经——C/C++常见面试知识点总结附面试真题

    参考:C/C++ 面试题 作者:zhaouc 发布时间: 2015-02-15 15:51:00 网址:https://blog.csdn.net/zhaouc/article/details/438 ...

  4. Java常见面试知识点:继承、接口、多态、代码块

    问题:Java常见面试知识点:继承.接口.多态.代码块 答案: 1.继承 继承中构造方法的访问特点 子类中所有的构造方法默认都会访问父类中无参的构造方法 为什么? • 子类在初始化的时候,有可能会使用 ...

  5. MySQL 常见面试知识点

    之前简单总结了一下MySQL的场景面试知识点 1.讲下MVCC原理 2.MySQL高可用架构介绍 3.OSC(在线更改表结构)原理 4.MySQL性能调优有哪些关键点/经验 5.MySQL在线备份方案 ...

  6. Java 面试知识点解析(六)——数据库篇

    前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大 ...

  7. Java 面试知识点解析(五)——网络协议篇

    前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大 ...

  8. Java 面试知识点解析(一)——基础知识篇

    前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大 ...

  9. JAVA 面试知识点

    主要包括以下几个部分: Java 基础知识点 Java 常见集合 高并发编程(JUC 包) JVM 内存管理 Java 8 知识点 网络协议相关 数据库相关 MVC 框架相关 大数据相关 Linux ...

最新文章

  1. 微软重新释出MS10-015 解决蓝屏问题
  2. SLAM、3D vision求职经历
  3. 人人须知的 jQuery 技巧
  4. 一款基于jquery ui的动画提交表单
  5. Linux内核BPF学习1
  6. STL 去重 unique
  7. 【Qt】数据库SQL接口层
  8. 计算机工程学院运动会方阵口号,关于校运会的方阵口号
  9. 逝者如斯,且听我胡说八道
  10. 数据科学最常用流程CRISP-DM,终于有人讲明白了
  11. 数据结构之二叉排序树
  12. readline/readline.h: No such file or directory
  13. 网页中JS实现(调用)打印预览功能
  14. css3优惠券的样式集合
  15. 【计算大于这个整数的最小质数】
  16. 计算机大赛鼓励语录,比赛前的鼓励的话
  17. shutil,re,hashlib,subprocess模块及其相关
  18. STM32G0系列的启动配置与程序下载说明
  19. android studio的旅游APP的开发和设计
  20. TFN F4 高性能OTDR光时域反射仪 都具有哪些优势?

热门文章

  1. 使用Java从地图中删除元素
  2. vue路由匹配实现包容性_我们甚至没有进行包容性的讨论
  3. 具有中央异常处理和VO验证的Spring Data JPA –框架
  4. 用Rocker制作模板
  5. Spring休眠教程
  6. 亚马逊s3的使用方法_使用jclouds库在Amazon S3上上传
  7. Java命令行界面(第27部分):cli-parser
  8. 休眠事实:访存策略的重要性
  9. 我应该使用32位还是64位JVM?
  10. jsp循环输出表格_「翻译」JS可视化学习之七:Promise、事件循环和异步2