Y a-t-il une différence entre ces deux instructions à l'intérieur d'une fonction?
bool returnValue = true;
// Code that does something
return(returnValue);
et ça?
bool returnValue = true;
// Code
return returnValue;
Le premier a des parenthèses autour de returnValue
.
C++ 14 ajoute un cas marginal où les parenthèses autour d'une valeur de retour peuvent modifier la sémantique. Cet extrait de code montre deux fonctions en cours de déclaration. La seule différence est entre parenthèses autour de la valeur de retour.
int var1 = 42;
decltype(auto) func1() { return var1; } // return type is int, same as decltype(var1)
decltype(auto) func1() { return(var1); } // return type is int&, same as decltype((var1))
Dans le premier func1
Renvoie un int
et dans le second func1
Renvoie un int&
. La différence de sémantique est directement liée aux parenthèses environnantes .
Le spécificateur auto
dans sa dernière forme a été introduit en C++ 11. Dans le C++ Language Spec il est décrit comme:
Spécifie que le type de la variable déclarée sera automatiquement déduit de son initialiseur. Pour les fonctions, spécifie que le type de retour est un type de retour de fin ou sera déduit de ses instructions de retour (depuis C++ 14)
De plus, C++ 11 a introduit le spécificateur decltype
qui est décrit dans le C++ Language Spec :
Inspecte le type déclaré d'une entité ou interroge le type de retour d'une expression.
[couper]
Si l'argument est soit le nom sans parenthèse d'un objet/fonction, soit une expression d'accès aux membres (object.member ou pointer-> member), alors le decltype spécifie le type déclaré de l'entité spécifiée par cette expression.
Si l'argument est une autre expression de type T, alors
a) si la catégorie de valeur de l'expression est xvalue, le decltype spécifie T &&
b) si la catégorie de valeur d'expression est lvalue, alors le decltype spécifie T &
c) sinon, decltype spécifie T
[couper]
Notez que si le nom d'un objet est entre parenthèses, il devient une expression lvalue, donc decltype (arg) et decltype ((arg)) sont souvent des types différents.
En C++ 14, la possibilité d'utiliser decltype(auto)
était autorisée pour les types de retour de fonction. Les exemples originaux sont ceux où la différence sémantique avec les parenthèses entre en jeu. Revisiter les exemples originaux:
int var1 = 42;
decltype(auto) func1() { return var1; } // return type is int, same as decltype(var1)
decltype(auto) func1() { return(var1); } // return type is int&, same as decltype((var1))
decltype(auto)
permet de déduire le type de retour de fin de la fonction de l'entité/expression dans l'instruction return. Dans la première version, return var1;
Revient en fait à renvoyer le type decltype(var1)
(un int
retourne le type par la règle 1 ci-dessus) et dans le second cas return (var1);
c'est en fait la même chose que decltype((var1))
(un type de retour int &
selon la règle 2b).
Les parenthèses font le type de retour int&
Au lieu de int
, donc un changement de sémantique. Morale de l'histoire - "Toutes les parenthèses sur un type de retour ne sont pas créées égales"
Il n'y a pas de différence.
Une raison d'utiliser des parenthèses serait si vous vouliez évaluer une expression avant de revenir, mais dans votre exemple, il n'y aurait aucune raison. Voir:
parenthèses entourant les valeurs de retour
pour de plus amples discussions.
AFAIK, rien n'est différent.
En C++, les expressions peuvent avoir la forme: expr
ou (expr)
. Donc, ce dernier est une expression avec plus de typage. Pour plus d'informations à ce sujet, reportez-vous à ne grammaire (recherchez "expression").
Les parenthèses sur l'exemple supérieur sont superflues; ils sont effectivement ignorés.
Ce serait la même chose que quelque chose comme ...
int x = (5);
Les parenthèses ici sont également ignorées.
Non, il n'y a pas de différence dans votre code.
Je suppose que boo
est une faute de frappe, et vous demandez s'il y a une différence entre
return expr;
et
return(expr);
La réponse est non.
Non, il n'y a pas de différence entre les deux, bien que vous puissiez inclure des parenthèses si cela rend l'expression facile à lire et à clarifier.
Vous ralentissez abusivement le compilateur!
La présence de parenthèses ralentit non seulement la phase de prétraitement, mais génère également un arbre de syntaxe abstraite plus compliqué: plus de mémoire, plus de calcul.
D'un point de vue sémantique? Ils sont exactement identiques. Qu'il y ait des parenthèses ou non, l'instruction return
évaluera complètement l'expression avant de la renvoyer.
Aucune différence!!
Les gens utilisent des parenthèses s'il y a une expression complexe impliquée.
BTW return
est une instruction et non une fonction.
Ils sont identiques. Je vois assez souvent la syntaxe des parenthèses, et je demande toujours à ceux qui l'utilisent: pourquoi? Et personne ne peut expliquer pourquoi ils l'utilisent.
Pour résumer franchement, les parenthèses autour des expressions renvoyées sont utilisées par des personnes qui ne comprennent pas tout à fait la différence entre les macros de fonction et les fonctions, ou qui sont confus quant à la priorité de l'opérateur ou à l'ordre des règles d'évaluation en C. Il n'y a pas de codage avantage de style d'utiliser des parenthèses.
Donc
return value;
est plus correct que
return (value)
car ce dernier suggère que vous ne savez pas très bien ce que vous faites :)