Cette déclaration de paramètre équivaut à plus explicite suivante
void f(const string &x = string("hello"))
Vous avez raison: la partie après la =
(que l'on appelle argument par défaut) est utilisé lorsque la fonction est appelée sans argument explicite , comme dans
f();
dans ce cas, est construit à partir "hello"
initialiseur et ensuite utilisé un objet temporaire de type string
en tant qu'initialisateur pour la référence x
. La construction de cette est effectuée temporaire dans le cadre du code d'appel, ce qui signifie que l'appel ci-dessus est équivalente à
f(string("hello"));
Pour répondre à votre question sur "hello"
: "hello"
est une chaîne littérale qui a une durée de stockage statique (c.-à- il réside dans la mémoire statique, tout comme dans C). Mais encore une fois, notez que dans cet exemple ce n'est pas "hello"
lui-même qui est utilisé comme un initialiseur pour la référence. Dans ce cas, le compilateur créera implicitement un objet temporaire string
de courte durée sans nom à cette fin, comme l'expliquent explicitement mes exemples ci-dessus.
Vous pourriez être intéressé par quelque chose comme [Accelerated C++] (http://www.informit.com/store/accelerated-c-plus-plus-practical-programming-by-example-9780201703535). – chris