constexpr虚拟函数与虚拟成员函数模板有何不同?

时间:2020-08-31 19:25:43

标签: c++ c++20

随着新的C ++ 20标准的发布,我们可以放宽标记为constexpr的函数(例如try-catch块)中包含的内容,以及可以标记为{{1 }}(例如虚函数)。虽然我了解了它的用处,但我发现自己试图在C ++ 20之前的constexpr函数中编写try-catch块。令我惊讶的是,这些固有的运行时过程可以在编译时进行评估。当我四处寻找解释时,一切似乎都指向这些限制是任意的。

这让我想知道模板是否相同。例如,成员函数模板不能是虚拟的,如以下示例所示:

constexpr

因此,此约束仅仅是一个任意约束,还是class MyClass { public: template<typename T> virtual void doSomething(); // Error: 'virtual' is not allowed in a function template declaration }; 函数和函数模板的编译时评估之间有什么不同?

注意:我发现this这个问题有助于解释为什么很难(不可能)这样做,所以我的问题不是关于是否可能,而是更多关于为什么编译器容易使用constexpr而不是模板来实现。

0 个答案:

没有答案