- cpp20[meta cpp]
このページはC++20に採用された言語機能の変更を解説しています。
のちのC++規格でさらに変更される場合があるため関連項目を参照してください。
C++20では、仮想関数に対してconstexpr
を指定し、定数式の文脈で呼び出せるようになる。
非constexpr
な仮想関数をconstexpr
仮想関数としてオーバーライドでき、逆もできる。一部のオーバーライドがconstexpr
で、一部がそうでない場合は、非constexpr
な仮想関数の呼び出しのみ定数式にならない。
struct X {
virtual int f() const = 0;
};
// 非constexprな純粋仮想関数を、constexpr仮想関数としてオーバーライド
struct Y : public X {
constexpr int f() const override { return 1; }
};
int main()
{
static constexpr Y y{};
constexpr const X& x = y;
static_assert(x.f() == 1);
}