2017-09-01 6 views
-1

Nous avions l'habitude de déclarer un pointeur vide comme ceci sans utiliser auto.Comment déclarer un pointeur vide en utilisant auto?

void* ptr = nullptr; 

Comment devons-nous faire la même chose en utilisant auto? Lequel devrions-nous utiliser? Ou peut-être il y a d'autres meilleurs moyens?

auto ptr = (void*)nullptr; 
auto ptr = (void*)0; 

Ce n'est pas une question sur le style de codage. Je veux juste savoir si nous devons utiliser auto, ce qui devrait être le meilleur moyen.

+10

Quel est le problème avec la version originale? – Praetorian

+0

@Praetorian Rien. Juste besoin d'utiliser 'auto' pour rester cohérent avec le style de codage. –

+6

@ user1869785 Pourquoi? L'utilisation de l'auto pour des choses comme celle-ci est excessive et peu claire. Il suffit de s'en tenir à '' '' 'void *' '' '' '' '' '' – mascoj

Répondre

3
auto ptr = static_cast<void*>(nullptr); 

Comme vous le savez probablement, moulages de style C ne sont pas si grand, car ils chasseront essentiellement rien, tout en static_cast empêche à la fois jeter const et reinterpret_cast de choses folles permet.

+1

Merci! Je pense que c'est exactement ce que je veux sans aller trop loin dans les débats de style de codage :) –

+5

S'il vous plaît ne faites pas cela. Auto devrait être utilisé si vous ne connaissez pas le type, si le type peut changer, ou si le type est si impitoyablement long qu'il devient encombrant. Dans ce cas, vous connaissez le type, le type ne va pas changer, et '' '' 'void *' '' '' est à peu près aussi court que les types de pointeurs. – mascoj

+1

@mascoj ce n'est pas un forum pour débattre des choix de style ops. Je n'ai pas de sentiments forts de toute façon. Vous ne pouvez pas l'aimer mais c'est une position raisonnable au sein de la communauté C++. Je vous suggère de lire l'article de Sutters sur presque toujours auto, iirc il recommande auto ici (et il serait complètement en désaccord avec votre déclaration, comme je le fais). –

0

Si vous connaissez déjà le type lors de la déclaration, il y a LITTLE raison d'utiliser auto. Comme mentionné par d'autres personnes, le style original devrait être ce que vous voulez, ce qui maintient votre code concis et clair.

void* ptr = nullptr; 

Si pour une raison quelconque, vous devez utiliser auto, comme juste pour le style curiosité ou le codage de votre commande ou si vous êtes un grand fan de auto, le static_cast<void*> comme mentionné dans la réponse de Nir serait une meilleure alternative que en utilisant le casting de style C, lequel (dernier) pourrait échouer à l'exécution.

auto ptr = static_cast<void*>(nullptr); 

Référence

+1

Comment les jets de style C peuvent-ils "échouer à l'exécution"? –

1

Alternatives sans fonte:

using void_ptr = void*; 
auto ptr = void_ptr{}; 

ou

auto ptr = std::add_pointer_t<void>{};