2010-03-17 4 views
1

Les deux instructions suivantes sont-elles sémantiquement identiques?Les deux instructions suivantes sont-elles sémantiquement identiques?

# 1 person p("Rahul", 20);

# 2 person const &p = person("Rahul", 20);

EDIT:

Désolé, je voulais demander si les deux suivantes sont sémantiquement même:

# 1 person const p("Rahul", 20);

# 2 person const &p = person("Rahul", 20);

+0

N'est pas le second C++ 0x? –

+0

@Space_Cowboy: C'est un C++ 98 valide. – missingfaktor

Répondre

2

Elles ne le sont pas. Cependant, la différence n'est affectée que par le fait que le second cas nécessite un constructeur de copie accessible en C++ 03 (même si l'appel du constructeur de copie n'est pas réellement fait)

// works with #1 fails with #2 
struct f1 { f1(string, int); private: f1(f1 const&); }; 
5

Non, ils ne le sont pas. La façon dont p se comporte dans chaque cas est différente. Par exemple, dans ce dernier cas, vous ne pouvez pas dire:

p.rename("fred"); 

en supposant que la personne avait une méthode rename().

Bien sûr, si votre première instance avait été:

const person p("Rahul", 20); 

les deux aurait été beaucoup plus semblables. J'espère que vous n'avez pas l'intention d'utiliser des références pour toutes vos "variables" :-)

+0

Donc, ils sont similaires, pas même? – missingfaktor

+0

@Rahul Avec la version const, je ne peux pas penser à une façon de les différencier, mais je suis sûr que quelqu'un d'autre va trouver quelque chose. –

+0

Vous pouvez définir une référence à (ce qui semble être) une temporaire, et que temporaire autour? Je ne le savais pas. – Ari

Questions connexes