2016-03-24 2 views
1

Y at-il une différence fonctionnelle entre les éléments suivants? Y a-t-il une raison de préférer l'un à l'autre?Différence entre auto et auto * lors du stockage d'un pointeur

auto p = new C(); 

et

auto* p = new C(); 
+1

Aucune différence, utilisez ce que vous préférez. Cependant, si l'expression déduite n'est pas de type pointeur quand 'auto * 'est utilisée, alors vous obtiendrez une erreur de compilation alors que dans le premier cas vous ne le ferez pas. – 0x499602D2

+0

'auto' ajoutera le pointeur pour vous. C'est la même chose – DimChtz

Répondre

1

Dans l'extrait que vous avez donné il n'y a pas de différence. Le compilateur en déduira que p sera un pointeur vers C, de toute façon.

Dans un cas plus général, il existe une différence;

auto *p = func(); 

auto p = func(); 

La première forme provoquera un message d'erreur si func() retours quelque chose qui est pas un pointeur, mais le second ne sera pas. Ceci est parfois utile (par exemple, dans un code basé sur un modèle) où il est nécessaire d'imposer une exigence que func() renvoie un pointeur plutôt que (par exemple) un int. [Bien que, certes, il existe des moyens plus clairs et plus puissants de faire respecter une telle exigence, tels que les traits].

+0

Je suggère qu'il y a un avantage supplémentaire à utiliser 'auto *' - cela vous permet de déclarer que le pointeur est 'const' si vous le désirez: ' const auto * const p = func(); ' –