以下两个语句在语义上是否相同?
#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);
答案 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&); };