Ral*_*zky 15 c++ virtual-functions constexpr c++11
可以X::f()在下面的代码中使用虚函数
struct X
{
constexpr virtual int f() const
{
return 0;
}
};
Run Code Online (Sandbox Code Playgroud)
是constexpr吗?
Ker*_* SB 28
从[dcl.constexpr]/3(7.1.5," constexpr说明符"):
constexpr功能的定义应满足以下要求:- 它不应该是虚拟的
在C ++ 17之前,virtual无法声明函数constexpr。通常的原因是,在constexpr代码中,所有事情都可以在编译时发生。因此,拥有一个引用基类并virtual在其上调用函数的函数确实没有多大意义。您也可以使其成为一个template函数并传递实型,因为您知道实型。
当然,随着constexpr代码变得更加复杂,或者如果您想在编译时代码和运行时代码之间共享接口,这种想法实际上是行不通的。在这两种情况下,都很容易忘记原始类型。这也std::error_code将使其更加constexpr友好。
同样,C ++ 20允许我们进行(有限的)对象动态分配这一事实意味着,很容易丢失对原始类型的跟踪。您现在可以创建一个vector<Base*>in constexpr代码,在其中插入一些Derived类实例,然后将其传递给constexpr函数以进行操作。
因此C ++ 20 允许virtual声明函数constexpr。
| 归档时间: |
|
| 查看次数: |
5175 次 |
| 最近记录: |