什么是`auto classMemberFunction() - > void {}`签名?
问题描述:
我在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)
有用吗?
答
这是(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.
在这种情况下,除了一致性之外没有其他意义。
一致性真的可以称为滥用? (我的意思是如果至少有一个函数实际需要它) – StoryTeller
@StoryTeller你的问号就是所谓的圆括号。这是一个有趣的问题 - 我个人发现尾部类型的语法难以阅读,但我当然明白为什么它会引人注目。 – Quentin