以下两个语句在语义上是否相同?

时间:2010-03-17 09:37:15

标签: c++ initialization semantics

以下两个语句在语义上是否相同?

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

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

修改

对不起,我打算问一下这两个语义是否相同:

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

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

2 个答案:

答案 0 :(得分:5)

不,他们不是。 p在每种情况下的表现方式都不同。例如,在后一种情况下,你不能说:

p.rename( "fred" );

假设某人有一个rename()方法。

当然,如果你的第一个例子是:

const person p("Rahul", 20);
这两者会更加相似。我希望你不打算使用所有“变量”的引用: - )

答案 1 :(得分:2)

他们不是。但是,差异仅受第二种情况需要在C ++ 03中访问复制构造函数的事实的影响(即使实际上没有复制构造函数调用)

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