On parle de déclaration....
Dans un source, si il ya "extern machin trucmuche", ca veut dire que trucmuche doit être importé d'une autre unité de compilation lors du "link".
Quand au "static" global... il suffit de faire le test dans un header, inclut dans plusieurs sources...
Chaque source aura sa propre instance de "test".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 static const std::string test="test de chaine";
Oui ! Je me souviens en avoir déjà fait les frais...
Mon cas était un peu différent donc je le poste ici au cas où quelqu'un rencontre le probleme à nouveau.
J'avais implémenté un simple singleton monothread de la sorte :
Jusque là pas de soucis, mais j'avais par erreur, inliné la méthode. Résultat : en débug tout allait bien mais en Release, comme mon singleton était appellé à des endroits différents, les instances étaient différentes à chaque endroit, plantage à la fermeture du programme évidement. J'ai mis longtemps avant de trouver que l'erreur venait de là.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 MonSingleton & MonSingleton::Instance() { static MonSingleton inst; return inst; }
Oui, sinon on aurait du mal avec les traits.
(réponse au message de NiamorH avec le Test::i & compagnie)
Mon blog anglais - Mes articles et critiques de livres - FAQ C++0x, avec liste des nouveautés - Conseils sur le C++ - La meilleure FAQ du monde - Avant de créer des classes que vous réutiliserez, regardez si ça n'existe pas déjà - Le site du comité de normalisation du C++
Le guide pour bien débuter en C++ - Cours et tutoriels pour apprendre C++
Partager