繁体   English   中英

即使该对象没有副本构造函数,为什么按值传递对象仍然有效?

[英]Why does passing an object by value work even if that object has no copy constructor?

根据这个问题,当对象通过值传递给另一个函数时,将调用复制构造函数。

我删除了复制构造函数作为测试,但仍可以按值传递它。 这有意义吗?

我注释了副本构造函数:

 /*
Matrix4(const Matrix4<T>& m)
{
    x.x = m.x.x; x.y = m.x.y; x.z = m.x.z; x.w = m.x.w;
    y.x = m.y.x; y.y = m.y.y; y.z = m.y.z; y.w = m.y.w;
    z.x = m.z.x; z.y = m.z.y; z.z = m.z.z; z.w = m.z.w;
    w.x = m.w.x; w.y = m.w.y; w.z = m.w.z; w.w = m.w.w;
}
 */

typedef Matrix4<float> mat4;

然后编译并运行良好:

void ttt(mat4 hi){

}

void yyy(){
    mat4 x;
    ttt(x);
}

那么在这种情况下可能不会调用复制构造函数? 这是怎么回事

如果不提供复制构造函数,则编译器会为您生成一个复制构造函数,当您按值传递时会使用该构造函数(在C ++ 11中,在某些情况下还可能调用移动复制构造函数。)禁用它,您应该将其声明为私有,或者在C ++ 11中将其delete

class Foo
{
 private:
  Foo(const Foo&);
};

class Foo11
{
 public:
  Foo(const Foo&) = delete;
};

如果未指定构造函数,则C ++会自己创建一个无参数的构造函数和一个副本构造函数。 它只是执行对象的副本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM