C++ constexpr final 虚函数
C++ constexpr final virtual functions
我在派生的 C++ 中实现纯虚函数 class,并标记方法 final
。我也想标记函数 constexpr
,但标准似乎不允许这样做。
是否有任何实际原因导致编译器难以实现这一点?还是由于通常的“此功能不被认为重要到足以添加到标准”的想法而省略了这样的功能?
根据评论,我原来的问题似乎没有说清楚我问的是 constexpr final
函数。以下代码说明了我要编译的内容:
struct A {
virtual int foo() const;
};
struct B : public A {
// Note that this function is final, and is therefore no longer
// polymorphic in types derived from B (e.g., the function call
// no longer requires a lookup in the virtual method table
// when the compile-time type is known to be derived from B)
constexpr int foo() const final {
return 0;
}
};
请注意,这被标记为 的副本,因为在 C++20 中,以上代码可以使用或不使用 final
关键字进行编译。
- C++20 添加了对此代码的支持。
- 在godbolt上,我们可以试试看:https://godbolt.org/z/f64e93dzY
- 看起来这是Defect Report 647
我在派生的 C++ 中实现纯虚函数 class,并标记方法 final
。我也想标记函数 constexpr
,但标准似乎不允许这样做。
是否有任何实际原因导致编译器难以实现这一点?还是由于通常的“此功能不被认为重要到足以添加到标准”的想法而省略了这样的功能?
根据评论,我原来的问题似乎没有说清楚我问的是 constexpr final
函数。以下代码说明了我要编译的内容:
struct A {
virtual int foo() const;
};
struct B : public A {
// Note that this function is final, and is therefore no longer
// polymorphic in types derived from B (e.g., the function call
// no longer requires a lookup in the virtual method table
// when the compile-time type is known to be derived from B)
constexpr int foo() const final {
return 0;
}
};
请注意,这被标记为 final
关键字进行编译。
- C++20 添加了对此代码的支持。
- 在godbolt上,我们可以试试看:https://godbolt.org/z/f64e93dzY
- 看起来这是Defect Report 647