使用自定义构造函数,可以使用自己的类型初始化结构。
struct Foo {
int x, y;
Foo(int X, int Y) : x(X), y(Y) {}
Foo(const Foo& f) : Foo(f.x, f.y) {}
};
Foo foo1(1, 2);
Foo foo2 = Foo(foo1);
但是,我发现声明构造函数是没有必要的。
struct Foo {
int x, y;
Foo(int X, int Y) : x(X), y(Y) {}
// Foo(const Foo& f) : Foo(f.x, f.y) {} <-- This can be omitted.
};
Foo foo1(1, 2);
Foo foo2 = Foo(foo1);
我想知道这怎么可能。
来自 https://en.cppreference.com/w/cpp/language/copy_constructor:
如果没有为类类型提供用户定义的复制构造函数,编译器将始终将复制构造函数声明为其类的非显式内联公共成员。这个隐式声明的复制构造函数的形式为
...T::T(const T&)