最近,我想编写一个静态库,它具有类模板和类模板特定实例化的几个非模板操作符重载函数。我决定在a.h中定义类模板并在a.cc中定义函数。但突然有一个问题,如果我用constexpr
声明和定义函数,编译器是否能够在编译时(链接时)计算结果?
答案 0 :(得分:1)
不,就像使用模板函数体一样,您不能将constexpr
函数的定义放在与使用它们的代码不同的翻译单元中。编译器只能看到当前翻译单元中的内容(aka:.cpp文件及其#includes的所有内容)。因此,如果函数体不存在,那么它就无法在编译时执行代码。
现在,您可以将它们放入单独的文件中。但使用它的代码仍然必须#include两个文件。