我有以下使用virtual constexprC++20 的示例代码,但无法编译:
enum legCount {
APODA = 0,
BIPEDAL = 2,
QUADRUPEDAL = 4,
};
class Animal {
public:
constexpr virtual legCount getLegCount() = 0;
};
class Tiger : public Animal {
public:
constexpr legCount getLegCount() { return QUADRUPEDAL; }
void manipulateLegsArray() {
unsigned char arr[getLegCount()];
}
};
Run Code Online (Sandbox Code Playgroud)
该代码使用 Clang 进行编译,但 MSVC 抱怨getLegCountin 的unsigned char arr[getLegCount()];计算结果不为常量表达式(失败是由于在其生命周期之外读取变量引起的)。MSVC 在这里是否正确?如果正确,这是为什么?
此外,我如何以一致的方式模仿此功能?我想要一个抽象基类,其中所有派生类都必须实现该函数,并且该函数必须是 constexpr。
确切的编译器错误消息如下:
D:\Projects\temp\demo\main.cpp(17,32): error C2131: expression did not evaluate to a constant [D:\Projects\temp\out\demo\demo.vcxproj]
D:\Projects\temp\demo\main.cpp(17,21): message …Run Code Online (Sandbox Code Playgroud)