【问题标题】:what's `auto classMemberFunction()->void {}` signature? [duplicate]什么是`auto classMemberFunction()->void {}` 签名? [复制]
【发布时间】:2016-12-29 09:31:02
【问题描述】:

我在an article 看到过类似这样的代码:

#include <iostream>

class MyClass {
public:

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

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

程序正确打印输出Argument is 4,但我不明白类函数成员的签名以及它与通常的签名有什么区别。何时使用这种不同的签名而不是 void myFunction(int i) 有用?

【问题讨论】:

    标签: c++ signature auto


    【解决方案1】:

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

    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 你的问号就是括号里的东西。这是一个品味问题——我个人觉得尾随类型语法更难阅读,但我当然明白为什么它可以引人注目。
    猜你喜欢
    • 2014-07-11
    • 2014-02-27
    • 1970-01-01
    • 1970-01-01
    • 2011-11-19
    • 2015-08-01
    • 1970-01-01
    • 2014-02-20
    • 1970-01-01
    相关资源
    最近更新 更多