temporaire Considérez ce qui suit:const référence se liant à un
string const& name1 = get_name(...);
string const name2 = get_name(...);
où get_name
retourne un objet string
. Comme on le sait, avec l'introduction de la sémantique des déplacements dans C++ 11, les deux instructions peuvent être efficaces, la première étant légèrement plus précise, car il n'est pas nécessaire d'effectuer un déplacement. (Oui, je sais que sur l'optimisation de la valeur de retour, mais il en est ainsi, il est un peu plus nuancé l'idée générale..)
Cependant, les appels de fonction suppose qu'ils sont laissés sur ceci:
string const& name3 {"Billy"};
string const name4 {"Debbie"};
Dans ce cas, , le littéral littéral "Billy"
est implicitement converti en un string
temporaire et name3
se lie au temporaire. Évidemment, name4
n'est pas temporaire.
Est-il vrai que pour name3
et name4
, les deux sont tout aussi efficaces? me semble que ce serait ...
Vous semble que ce serait ... quoi? Pour 'name3', un' chaîne' temporaire sera construit à partir du littéral '' Billy'' et ensuite lié à 'name3', pour' name4', il (ie 'string') sera construit à partir du' 'Debbie littéral' ' "' directement. – songyuanyao
Je dirais que vous allez dans les zones d'optimisation prématurée ici et devrait choisir celui qui est plus clair (à mon avis, la non-référence), sauf si vous avez effectivement mesuré cela comme un goulot d'étranglement. –
Je m'attendrais au même code généré (même dans le niveau d'optimisation inférieur). – Jarod42