【面试复习】c++ 基础知识

1、static

      (1)对于函数定义或者代码块以外的变量修饰static ,static修改标识符的链接属性,由默认的external变为internal,作用域和存储类型不改变,表明该变量由全局的变成了文本内部的,如果变量定义在头文件内,其余任何其他文本引用他,得到的变量都只是他的副本

      (2)对于源文件内函数加上static,这个函数只能被这个源文件内被使用

    warning:不要再头文件中声明static的全局函数,不要在cpp内声明非static的全局函数,如果你要在多个cpp中复用该函数,就把它的声明提到头文件里去,否则cpp内部声明需加上static修饰。

      (3)对于代码块内部变量加上static, static改变了存储类型,由自动变量变成静态变量,全局性+累加性

      (4)对于类内部的静态变量和静态函数,不属于某一个具体对象,属于类本身

2、c 与 c++区别

  类,对象,模板

3、c++的四种转换cast

  (1)static_cast<type_id> (expression)

    类似于c语言的强制转换,转换时没有类型检查,适用的转换场景:父子类指针或引用之间的转换;基础类型之间的转换;void*与其他任何类型指针之间的转换

  (2)const_cast<type_id> (expression)

      用于修改指针或引用的const、volatile属性

  (3)dynamic_cast<type_id> (expression)

    用于父子类指针或引用之间的转换,与static_cast不同的时,dynamic_cast有类型检查,如果不合格,返回空指针

  (4)reinterpret_cast<type_id> (expression)

       该转换会直接棒exprssion当作二进制,然后用type_id语义来解释,有时会得出想不到的值,所以很少用

 

4、c++四个智能指针: auto_ptr、unique_ptr、share_ptr、weak_ptr

5、野指针:未分配或者已释放

6、为何析构函数必须是虚函数?为什么C++默认的析构函数不是虚函数 考点:虚函数 析构函数

析构函数为虚函数是为了,基类指针指向子类对象时,释放对象时,可以调用到子类析构函数,释放子类对象; 设置函数为虚函数是有代价的,类需要内部存储一个虚函数表和指向虚函数表的指针,所以不准备做基类还是不要默认虚函数了

7、函数指针

每一个函数都有一个入口地址,函数指针就是指向这个地址的指针

 8、源码到可执行文件

预编译 -> 编译 -> 链接(静态,动态)

posted @ 2020-07-06 18:28  Demo12138  阅读(33)  评论(0编辑  收藏  举报