Le code est-il correct?
Oui, votre code est (presque) correct, car "string"
est un littéral de chaîne situé dans le stockage statique.
Remarque: Un pointeur est simplement une variable qui stocke une adresse de mémoire. Cette ligne stocke simplement l'adresse de la chaîne littérale "chaîne" à l'intérieur d'une variable appelée temp
. La norme C++ garantit que la chaîne littérale restera en mémoire pendant toute la durée du programme tel que défini ci-dessous. Ce qui signifie que vous êtes libre d'utiliser cette adresse mémoire dans n'importe quel contexte, pendant toute la durée de vie de votre programme.
Pourquoi?
La norme 03 C++ (actuel) a ceci à dire:
Une chaîne ordinaire est de type littéral « réseau de n const char » et la durée statique de stockage (3,7),
et section 3.7.1 - 1:
Tous les objets qui n'ont de stockage dynamique La durée de stockage statique n'est pas . Le stockage pour ces objets doit durer pendant la durée du programme.
Attention:
Dans votre code, vous retournez un char*
, vous devriez vraiment être un const char *
retournerez. C'est un comportement indéfini si vous essayez de modifier un littéral de chaîne, et votre valeur de retour de fonction ne doit pas prétendre l'autoriser.
Sur une note relative à l'avertissement. Si vous avez dans votre code à 2 endroits différents une chaîne appelée "string"
alors que ce soit ou non des chaînes distinctes est implémentée.
Est-ce ce devoir? –
@Dirk Eddelbuettel: non. – Moeb