2016-12-29 97 views
0

我在an article看到类似这样的代码:什么是`auto classMemberFunction() - > void {}`签名?

#include <iostream> 

class MyClass { 
public: 

    auto myFunction(int i)->void { 
    std::cout << "Argument is " << i << std::endl; 
    } 
}; 

void main() { 
    MyClass myClass; 
    myClass.myFunction(4); 
} 

程序正确打印输出说法是4,但我不明白的类函数成员的签名,什么是它的与平常的不同。使用这个不同的签名而不是void myFunction(int i)有用吗?

回答

1

这是(C)使用已在C++ 11中引入的尾随返回类型语法。语法是:

auto functionName(params) -> returnType; 
auto functionName(params) -> returnType { } 

它的工作原理相同,与左边的返回类型的经典函数声明,除了结尾类型可以使用函数的签名,即引入的名称:

T Class::function(param);  // No particular behaviour 
auto Class::function(param) -> T; // T can use Class::Foo as Foo, decltype(param), etc. 

在这种情况下,除了一致性之外没有其他意义。

+0

一致性真的可以称为滥用? (我的意思是如果至少有一个函数实际需要它) – StoryTeller

+0

@StoryTeller你的问号就是所谓的圆括号。这是一个有趣的问题 - 我个人发现尾部类型的语法难以阅读,但我当然明白为什么它会引人注目。 – Quentin