2015-08-24 5 views
2

Je lisais this article sur les plus utiles 11 C++ fonctionnalités et je suis tombé sur ce morceau de code dans la dernière section:sens possible de x> y> nouvelle T: syntaxe

if(_size != copy._size) 
{ 
    _buffer = nullptr; 
    _size = copy._size; 
    _buffer = _size > 0 > new T[_size] : nullptr; 
} 

j'utilisé pour considérer la dernière ligne comme (_size > 0) > other_Value mais dans ce cas l'opérande de droite est une déclaration new. Je ne peux vraiment pas comprendre le sens de cela. De plus, à quoi fait référence le : nullptr? Y at-il quelque chose qui est initialisé à nullptr? Si oui, quoi?

+0

Seulement comme une information non strictement lié à votre poste - une question sur la mise en œuvre 'a PiotrNycz

Répondre

10

Je pense que c'est un mauvais extrait. Il devrait être

_buffer = _size > 0 ? new T[_size] : nullptr; 

qui est fondamentalement opérateur ternaire. Si _size> 0, la mémoire pour le tableau de T de taille _size sera allouée, dans les autres cas nullptr sera affecté à _buffer. Et ce n'est pas C++ 11 fonction, puisque dans 98 C++, il peut être juste

_buffer = _size > 0 ? new T[_size] : 0; // or NULL, or (void*)0. 
+0

Jeez, maintenant tout est logique. Merci. C'était littéralement me rendre fou. – RDGuida

+2

Comme '?' Est juste à droite de '>' sur la plupart des claviers (US), c'est une faute de frappe très imaginable. – Angew

+1

@RDGuida Si vous êtes un utilisateur enregistré sur ce site, je vous suggère de laisser un rapport de bogue à ce sujet. – NathanOliver