interview 知识点

C++ 知识点

内联函数inline

  1. inline 和 宏定义#define的作用基本类似,都是替换或者展开。 在程序编译阶段,如果遇到内联函数,则将内联函数的实现在当前位置展开。内联的目的是为了减少函数的调用开销,从而提高运行效率,但会增加代码体量。

内联函数的优缺点

优点:

(1)通过避免函数的回调,加速了程序的执行;

(2) 通过利用指令缓存,增强局部访问性;

(3)使用内联可以替换重复的短代码,方便代码管理;

缺点:

(1) 由于是替换展开,因此会增大代码体量;
(2)一旦修改内联,所有用到该内联的地方都需要重新编译;

内联函数与宏的区别

(1)内联函数可调试,而宏定义不行;

(2)内联函数首先是函数,函数的很多性质都适用于内联函数,如:内联函数可以重载;编译器会对内联函数的参数类型做安全检查或自动类型转换(同普通函数),而宏定义则不会;

(3)内联函数可以访问类的私有成员变量,宏定义则不能;

static的用法详解

1. 静态局部变量:用于函数体内部修饰变量,这种变量的生存期长于该函数。
		int foo() {
			static int i = 1;  //在调用的第一次进行初始化,之后调用不再初始化
			return i;
		}
		//跟定义一个全局变量有什么区别呢,同样是初始化一次,连续调用foo()的结果是一样的,
		//但是,使用全局变量的话,变量就不属于函数本身了,不再仅受函数的控制,
		//给程序的维护带来不便。静态局部变量正好可以解决这个问题。
		//静态局部变量保存在全局数据区,而不是保存在栈中,每次的值保持到下一次调用,
		//直到下次赋新值。
2.静态全局变量:定义在函数体外,用于修饰全局变量,表示该变量只在本文件可见。
3.静态函数:准确的说,静态函数跟静态全局变量的作用类似:(不能被其它文件所用;其它文件中可以定义相同名字的函数,不会发生冲突;)
4.静态数据成员:用于修饰 class 的数据成员,即所谓“静态成员”。这种数 据成员的生存期大于 class 的对象(实体 instance)。静态数据成员是每个 class 有一份,普通数据成员是每个 instance 有一份,因此静态数据成员也叫做类变量,而普通数据成员也叫做实例变量。
5.静态成员函数:用于修饰 class 的成员函数。

(1)调用静态成员函数,可以用成员访问操作符(.)和(->)为一个类的对象或指向类对象的指针调用静态成员函数,也可以用类名::函数名调用
(2) 静态成员函数不能访问非静态数据和调用非静态函数,非静态成员函数可以访问静态数据。

Volatile

volatile的本意是“易变的” 因为访问寄存器要比访问内存单元快的多,所以编译器一般都会作减少存取内存的优化,但有可能会读脏数据。当要求使用volatile声明变量值的时候,系统总是重新从它所在的内存读取数据

C++ 中 struct 和 class

struct 更适合看成是一个数据结构的实现体,class 更适合看成是一个对象的实现体。
最本质的一个区别就是默认的访问控制
默认的继承访问权限。struct 是 public 的,class 是 private 的。

左值与右值

最早是从C语言继承而来的。在C语言,或者继承版本的解释

  • 左值是可以位于赋值运算符 = 左侧的表达式(当然,左值也可以位于 = 的右侧),而
  • 右值是不可以位于赋值运算符 = 左侧的表达式。

根据《C++ Primer》的说法,左值和右值可以这样区分:

  • 一个表达式是左值还是右值,取决于我们使用的是它的值还是它在内存中的位置(作为对象的身份)。也就是说一个表达式具体是左值还是右值,要根据实际在语句中的含义来确定。

      (通俗的左值的定义就是非临时对象,那些可以在多条语句中使用的对象。所有的变量都满足这个定
      义,在多条代码中都可以使用,都是左值。右值是指临时的对象,它们只在当前的语句中有效)
    

左值和右值的语法符号:左值的声明符号为”&”, 为了和左值区分,右值的声明符号为”&&”。

新特性的目的
右值引用 (Rvalue Referene) 是 C++ 新标准 (C++11, 11 代表 2011 年 ) 中引入的新特性 , 它实现了转移语义 (Move Sementics) 和精确传递 (Perfect Forwarding)。它的主要目的有两个方面:

消除两个对象交互时不必要的对象拷贝,节省运算存储资源,提高效率。
能够更简洁明确地定义泛型函数。

details: https://www.ibm.com/developerworks/cn/aix/library/1307_lisl_c11/index.html

虚函数

C++中的虚函数(表)实现机制以及用C语言对其进行的模拟实现: https://blog.twofei.com/496/

智能指针

  • shared_ptr:多个智能指针可以共享同一个对象,对象的最末一个拥有着有责任销毁对象,并清理与该对象相关的所有资源。
  • weak_ptr:允许你共享但不拥有某对象,一旦最末一个拥有该对象的智能指针失去了所有权,任何weak _ptr 都会自动成空
  • unique_ptr: 是一种在异常时可以帮助避免资源泄漏的智能指针。采用独占式拥有,意味着可以确保一个对象和其相应的资源同一时间只被一个 pointer 拥有。一旦拥有着被销毁或编程 empty,或开始拥有另一个对象,先前拥有的那个对象就会被销毁,其任何相应资源亦会被释放
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值