我有以下代码:
struct A{};
struct Base {
virtual A& internal() = 0;
};
struct Derives : public Base {
auto& internal() override { // <-- conflicting return type
return internal_;
}
private:
A internal_;
};
int main() {
Derives d;
auto& internal = d.internal();
}
Run Code Online (Sandbox Code Playgroud)
这无法编译(在coliru上测试 - 使用gcc),返回类型冲突 - 我的问题是为什么编译器不能推断出两者internal_(因此返回类型)A?是否在auto编译的不同阶段推断出类型,例如检查虚拟覆盖的类型?当然,如果你auto用正确的类型替换它会编译- 但这也是重点.
(这是铿锵错误,gcc有点类似)
main.cpp:8:11:错误:虚函数'internal'的返回类型与它覆盖的函数的返回类型不一致('auto&'不是从'A&'派生的)
Run Code Online (Sandbox Code Playgroud)auto& internal() override { // <-- conflicting return type ~~~~~ ^main.cpp:4:16:注意:重写的虚函数就在这里
Run Code Online (Sandbox Code Playgroud)virtual A& internal() = 0; ~~ ^生成1个错误.