【发布时间】:2026-01-04 06:25:01
【问题描述】:
人们经常会读到你不能将普通的左值引用绑定到临时对象。因此,当他们不想涉及复制时,经常会看到 A 类的方法以 const A& 作为参数。然而这样的结构是完全合法的:
double& d = 3 + 4;
因为它不会将临时对象 3 + 4 绑定到引用 d,而是使用对象 3 + 4 初始化引用。正如标准所说,只有当值不是类型或引用(或继承)时,引用才会赢' 不使用使用转换或某事物从临时对象获得的对象(即另一个临时对象)进行初始化。在这种情况下你可以看到:
int i = 2;
double & d = i;
这是不合法的,因为 i 不是 double 类型,也不是从它继承的。然而这意味着,临时对象可以绑定到引用 - 但它真的有约束力吗?不是用临时对象作为参数的复制构造函数创建一个新对象吗?
因此,我认为,让方法采用 const A& 参数而不是 A& 并不是在第二种情况下,这种方法不能作为 A 类型的临时对象的参数(因为它会),而是因为它涉及复制构造函数(就像参数是 A 类型一样)。我说的对吗?
【问题讨论】:
-
double& d = 3 + 4;是不合法的,因为引用类型不是 const 限定的。 -
只有
double&& d = 3 + 4;是合法的(在 C++0x 中),因为3+4是一个右值(它是否有意义,合法与否,是一个不同的问题)。 -
很难说你的问题到底是什么......