面试题 #
基础题 #
huihut/interview #
你遇到过哪些高质量的 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
叶王 © 2013-2024 版权所有。如果本文档对你有所帮助,可以请作者喝饮料。