2016-12-29 7 views
0

私はan articleにこの1のようなコードを見てきました:`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++ 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. 

この場合でも、一貫性以外の点はありません。

+0

一貫性は実際に虐待と呼ばれることがありますか? (少なくとも1つの関数が実際にそれを必要とするかどうかを意味します) – StoryTeller

+0

@StoryTellerあなたの疑問符は、かっこのために呼び出されたものです。それは味わいの問題です。私は個人的には、後に続くタイプの構文を読むのが難しいと感じていますが、なぜそれが魅力的なのかを確かめています。 – Quentin

関連する問題