2016-12-29 2 views
0

j'ai vu dans an article un code similaire à celui-ci:qu'est-ce que `auto classMemberFunction() -> void {}` signature?

#include <iostream> 

class MyClass { 
public: 

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

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

le programme imprime correctement la sortie L'argument est 4, mais je ne comprends pas la signature du membre de la fonction de la classe et ce qui est son différence avec l'habituel. Quand il est utile d'utiliser cette signature différente plutôt que void myFunction(int i)?

Répondre

1

Ceci est une utilisation (ab) de la syntaxe de type retour-retour qui a été introduite dans C++ 11. La syntaxe est:

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

Il fonctionne comme une déclaration de fonction classique avec le type de retour à gauche, à l'exception que le type de fuite peut utiliser des noms introduits par la signature de la fonction, à savoir:

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

Dans ce cas, cependant, il n'y a aucun point sauf la cohérence.

+0

La consistance peut-elle vraiment être appelée abus? (Je veux dire si au moins une fonction l'exige réellement) – StoryTeller

+0

@StoryTeller votre point d'interrogation est ce qui a appelé les parenthèses. C'est une question de goût - Personnellement, je trouve la syntaxe du type de queue plus difficile à lire, mais je vois certainement pourquoi cela peut être convaincant. – Quentin