2013-05-20 2 views
1

J'ai donc une classe qui a un membre de données de chaîne const.Un membre de données const

la chaîne elle-même est reçue de l'utilisateur.

comment écrire un constructeur qui peut l'utiliser et comment puis-je obtenir la chaîne de l'utilisateur et le mettre dans la classe?

grâce

+0

en tant que pièce générale des conseils, des membres de données non cessibles (comme par exemple 'std :: membre de chaîne const;') peuvent faire classe gênante à utiliser. Il est très fréquent de laisser les membres non const, tout en s'assurant que les utilisateurs de la classe ne peuvent jamais le voir via une interface non mutable, s'ils ont besoin de le voir. Ce conseil pourrait sembler aller à l'encontre de l'esprit de sécurité de const, mais néanmoins il peut vous épargner beaucoup de douleur. –

+0

@LucDanton Je pense que non. Cela ne va pas à l'encontre de l'esprit de const sécurité. La sécurité de const est plus sur comment les classes se comporte quand elle est dans un "état constant" ou l'autre. Il s'agit davantage des contraintes imposées par l'interface de classe sur ses membres et non de ce que les membres imposent sur l'interface de classe. Et donc, tout simplement, votre conseil est correct. :) –

Répondre

5

Pour initialiser les membres const (ainsi que les membres de référence), vous devez utiliser constructor initialization lists.

Voici comment vous le feriez en C++ 11 (la chaîne est passée par valeur, puis déplacé, de sorte qu'aucune copie sera effectuée lorsqu'une rvalue est donnée en entrée au constructeur):

#include <string> 

struct X 
{ 
    X(std::string s_) : s(std::move(s_)) { } 
//     ^^^^^^^^^^^^^^^^^^ 
    std::string const s; 
}; 

en C++ 03 vous le faire de cette façon:

#include <string> 

struct X 
{ 
    X(std::string const& s_) : s(s_) { } 
//       ^^^^^^^ 
    std::string const s; 
}; 
Questions connexes