C++经典面试题(最全,面中率最高)

1.new、delete、malloc、free关系

delete会调用对象的析构函数,和new对应free只会释放内存,new调用构造函数。malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能完成清理与释放内存工作的运算符delete。注意new/delete不是库函数。 Read more

decltype和auto的区别

注意:引用类型的变量必须初始化,本文在个别示例代码中没有做详细说明,请注意。

auto

编程时候常常需要把表达式的值付给变量,需要在声明变量的时候清楚的知道变量是什么类型。然而做到这一点并非那么容易(特别是模板中),有时候根本做不到。为了解决这个问题,C++11新标准就引入了auto类型说明符,利用auto关键字,编译器会根据所赋值的类型推断变量的类型,因此,使用auto声明的变量必须初始化Read more

请说出static和const关键字尽可能多的作用

static关键字至少有下列n个作用

  • 函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值;
  • 在模块内的static全局变量可以被模块内所用函数访问,但不能被模块外其他函数访问;
  • 在模块内的static函数只能被这一模块内的其他函数调用,这个函数的使用范围被限制在声明它的模块内;
  • 在类中的static成员变量属于整个类所有,对类的所有对象只有一份拷贝;
  • 在类中的static成员函数属于整个类所有,这个函数不接受this指针,因而只能访问类的static成员变量。

Read more