4.2 面试题

面试题 #

基础题 #

huihut/interview

Github stars #

你遇到过哪些高质量的 C++ 面试? #

What is the best C++ interview question? [closed] #

C++ FAQ #


volatile 有什么用? #

  • 告诉编译器不应对这样的对象进行优化
  • 每次访问时都必须从内存中取出值
    • 没有被 volatile 修饰的变量,可能由于编译器的优化,从 CPU 寄存器中取值
  • const 可以是 volatile (如只读的状态寄存器)
  • 指针可以是 volatile


进阶题 #

为什么 C++ 的 member function template 不能是 virtual 的 #

比如,下面的代码是不合法的:

class Animal{
  public:
      template<typename T>
      virtual void make_sound(){
        //...
      }
};

因为 C++ 的编译与链接模型是 “分离” 的 (至少是部分原因吧)。

从 Unix/C 开始,一个 C/C++ 程序就可以被分开编译,然后用一个 linker 链接起来。这种模型有一个问题,就是各个编译单元可能对另一个编译单元一无所知。 一个 function template 最后到底会被 instantiate 为多少个函数,要等整个程序 (所有的编译单元) 全部被编译完成才知道。 同时,virtual function 的实现大多利用了一个 “虚函数表” 的东西,这种实现中,一个类的内存布局 (或者说虚函数表的内存布局) 需要在这个类编译完成的时候就被完全确定。 所以,由上面的矛盾可知,C++ 的 member function 不能既是 template 又是 virtual 的。

参考:https://www.zhihu.com/question/60911582/answer/182045051


本文访问量

本站总访问量

本站总访客数