小编Arg*_*art的帖子

什么是临时对象和引用的处理?

人们可以经常读到,你不能将正常的左值引用绑定到临时对象.因为当他们不想涉及复制时,可以经常看到A类的方法将const A&作为参数.但是,这种结构是完全合法的:

double& d = 3 + 4;
Run Code Online (Sandbox Code Playgroud)

因为它不会将临时对象3 + 4绑定到引用d,而是使用对象3 + 4初始化引用.正如标准所说,只有当值不是类型或引用(或继承)时,引用才不会使用从临时对象获得的对象使用转换或sth(即另一个临时对象)初始化.在这种情况下你可以看到:

int i = 2;
double & d = i;
Run Code Online (Sandbox Code Playgroud)

这不合法,因为我不是double类型,也不是继承它.然而,这意味着,临时工可以绑定到引用 - 但它是否真的具有约束力?是不是使用临时对象作为参数的复制构造函数创建新对象?

因此,正如我认为的那样,使用const A¶m代替A&的方法并不是第二种情况下这种方法不能作为A类参数临时对象(因为它会),但因为它涉及到复制构造函数(就像参数类型为A一样).我对吗?

c++ reference lvalue

4
推荐指数
2
解决办法
2269
查看次数

标签 统计

c++ ×1

lvalue ×1

reference ×1