是否允许在允许的类中混合使用新旧C++函数语法?

Phi*_*ipp 10 c++ auto c++14

这段代码实际上有效:

class Abstract {
    virtual auto foo() -> int = 0;
};

class Concrete: public Abstract {
    int foo() { cout << "blah!" << endl; return 1; }
} instance;
Run Code Online (Sandbox Code Playgroud)

我知道函数被破坏并链接到相同的函数签名,但这种混合在C++ 14中实际上是合法的吗?

Emi*_*lia 7

auto foo()->int并且int foo()是使用不同语法表示的相同原型,因此第二个函数是第一个函数的覆盖,并将在运行时调度(虚拟)中替换它.

右侧回语法,通常有其他目的,如

template<class A, class B>
auto some_combination(A a, B b) -> decltype(a+b);
Run Code Online (Sandbox Code Playgroud)

否则需要更复杂的语法

temlate<class A, class B>
decltype(std::declval<A>()+std::declval<B>()) some_combination(A a,B b);
Run Code Online (Sandbox Code Playgroud)

因为ab没有在原型的左侧定义.

当简单地定义返回类型时,左或右放置基本上是无关紧要的.