这段代码实际上有效:
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中实际上是合法的吗?
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)
因为a并b没有在原型的左侧定义.
当简单地定义返回类型时,左或右放置基本上是无关紧要的.
| 归档时间: |
|
| 查看次数: |
328 次 |
| 最近记录: |