如何指定初始化具有构造函数的 C++ 结构?

Leo*_*eon 0 c++ constructor initialization default-constructor designated-initializer

我有一个非常大的结构,它具有自定义的复制构造函数、自定义的移动构造函数、自定义的移动分配器和自定义的复制分配器,但我还需要在某处使用指定初始化语法来初始化它,因为它非常大,而我只想仅初始化其中的几个字段,其余字段保留默认值。

\n

例如:

\n
struct SA_t {\n    int a;\n    int b;\n    int c;\n};\n\nint main() {\n    SA_t sa1 { .a = 2, .b = 3, .c = 4,};  // no problem\n    return EXIT_SUCCESS;\n};\n
Run Code Online (Sandbox Code Playgroud)\n

但是当我为其添加自定义构造函数时,我根本无法使用指定初始化方法。

\n
struct SA_t {\n    SA_t() {\n        a = 0;\n        b = 1;\n        c = 2;\n    };\n\n    int a;\n    int b;\n    int c;\n};\n\nint main() {\n    SA_t sa1 { .a = 2, .b = 3, .c = 4,};  /* no matching function for call to \xe2\x80\x98SA_t::SA_t(<brace-enclosed initializer list>)\xe2\x80\x99 */\n    return EXIT_SUCCESS;\n};\n
Run Code Online (Sandbox Code Playgroud)\n

有没有办法,我可以保留自定义构造函数并同时使用指定初始化语法?

\n

Mik*_*ore 5

没有。指定的初始值设定项仅适用于聚合。聚合是满足一些条件的类型,特别是:

  • 没有用户声明或继承的构造函数