代码之家  ›  专栏  ›  技术社区  ›  zahl

使用自己的类型[重复]初始化C++结构

  •  0
  • zahl  · 技术社区  · 1 年前

    使用自定义构造函数,可以使用自己的类型初始化结构。

    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);
    

    我想知道这怎么可能。

    1 回复  |  直到 1 年前
        1
  •  3
  •   John Zwinck    1 年前

    从…起 https://en.cppreference.com/w/cpp/language/copy_constructor :

    如果没有为类类型提供用户定义的复制构造函数,编译器将始终将复制构造函数声明为其类的非显式内联公共成员。此隐式声明的副本构造函数的形式为 T::T(const T&) ...