Ce qui est une façon de déclarer une chaîne const est plus recommandé?variable globale statique V classe
- Est de déclarer la variable globale à la portée du fichier.
- de la déclarer globale à la classe.
La variable ne sera utilisée que dans les fonctions membres de la classe. J'ai tendance à me sentir mieux car il est spécifique aux fonctions membres.
A.cpp
---------------------
static const std::string hello_str = "Hello";
void A::print()
{
std::cout << hello_str;
}
(OR)
A.h
---------------------
class A{
public:
static const std::string hello_str;
void print();
}
A.cpp
---------------------
const std::string A::hello_str = "Hello";
void A::print()
{
std::cout << A::hello_str;
}
Modifier -1:
Permettez-moi de dire que le contenu de hello_str peuvent changer. Par exemple. la chaîne est mise à jour manuellement par le développeur chaque fois qu'il apporte une modification au fichier.
Dans ce cas, serait-il logique de garder l'initialisation variable dans une fonction? Il peut ne pas être clair/évident pour l'utilisateur de mettre à jour la chaîne. Si elle était conservée globalement dans le fichier (1) ou dans la classe (2), les autres développeurs peuvent "identifier" & modifier cette chaîne.
Étant donné le cas d'utilisation ci-dessus, recommandez-vous encore avoir une fonction pour retourner la chaîne? Ou puis-je utiliser la variable statique de niveau classe (avec un spécificateur d'accès privé)?
Peut-on expliquer que «l'un est effectivement privé et l'autre est visible publiquement». - Je pensais que les deux sont 1 et 2 sont publics. "Je suis favorable à la déclaration dans la classe, mais privée." - Comprendre cette partie, que seul le membre func y accède et pas de main (autre fonction membre de la classe) "Je trouve cela plus facile à maintenir dans le cas où les implémentations se déplacent et bien sûr, si cette statique dans le cpp est en quelque sorte accessible aux implémentations extérieures, alors vous pouvez aussi le déclarer comme privé dans la classe afin que les autres ne puissent pas y accéder. " - Peut-on expliquer cela et/ou me donner un exemple? –
@KingkongJnr c'est juste le cas évident: dans # 1, le 'static' peut être accédé par n'importe quoi dans A.cpp qui ne le précède pas. si A.cpp contient seulement des définitions de la classe A, alors c'est ce que j'ai appelé "effectivement privé". la visibilité et l'accès à la statique est * restreint *. C'est une approche commune que les programmeurs utilisent pour leurs fonctions/données privées. par exemple: 'main()' n'a pas pu accéder à cette static, sauf si main était défini dans A.cpp. – justin
@KingkongJnr 'print', déclaré' private' et foo est public ici: 'class A {\ n public: void foo(); \ n privé: \ n void print(); \ n}; ' – justin