Syntaxe de déclation de variable C ++

Je suis récemment tombé sur cette construction: int (m); ce qui semble être équivalent à: int m;

Bizarrement, je n’ai jamais vu cet idiome particulier auparavant. Quelqu’un peut-il m’indiquer une référence où je peux lire la spécification à ce sujet ou simplement expliquer directement? Est-ce que cela fonctionne aussi en C droit?

Merci, confusdeveloper

Ce n’est pas un “idiome”. C’est juste une paire de parenthèses redondante. Grammaticalement, ils peuvent être là, mais ils ne servent à rien.

Parfois, des parenthèses apparemment superflues peuvent être utilisées pour résoudre les ambiguïtés des déclarations C ++, comme

 int a(int()); 

qui déclare une fonction peut être transformé en

 int a((int())); 

ce qui équivaut à

 int a = int(); 

et définit une variable. Mais ce n’est pas exactement ce que vous avez dans votre cas.

C’est aussi utilisé pour le casting. Comme,

 double m= 10.0; int n= int(m); 

En plus d’autres réponses, le déclarant doit parfois être mis entre parenthèses.
Par exemple:

 struct A {}; struct B { A a; }; namespace N { struct B { int a; }; void f() { A (::B::*p) = &::B::a; // this () cannot be omitted } } 

Si () est omis dans le code ci-dessus, le compilateur reconnaît un spécificateur de nom nested consécutif A::B au lieu de A et ::B et émettra une erreur.
Cette parenthèse est nécessaire mais conduit parfois à une situation trompeuse.

 struct A { int m; A() {} A( int ) {} // this isn't called }; int i; int main() { A(i); // this is a declaration im = 1; // ok } 

Dans le code ci-dessus, A(i) est une déclaration (et également une définition dans ce cas) d’un object i , au lieu d’une expression d’appel de constructeur avec un argument int , i .

J’espère que cela t’aides.