聚合初始化具有不同的参数顺序

Ere*_*ren 1 c++ c++17

有什么方法可以指定与声明顺序不同的参数?

例如,假设我具有以下结构:

struct Coord
    {
        int x, y;
    };
Run Code Online (Sandbox Code Playgroud)

我可以初始化为

auto a = Coord{ y(5),x(4) };
Run Code Online (Sandbox Code Playgroud)

请注意,出于好奇我是在问这个,我真的不需要做这样的事情。但是我想知道是否可以在不声明构造函数但指定参数的情况下初始化结构。

Mic*_*ler 6

不幸的是,您不能更改结构成员构造的顺序。使用C ++ 20,您可以按名称指定成员(请参阅指定的初始化器)。不幸的是,初始化的名称必须与成员的顺序相同。

这是来自cppreference的引用(上面的链接):

注意:乱序的指定初始化,嵌套的指定初始化,指定的初始化程序和常规初始化程序的混合以及数组的指定初始化在C编程语言中均受支持,但在C ++中是不允许的。

struct Coord
{
    int x, y;
};
Run Code Online (Sandbox Code Playgroud)

初始化:

auto a = Coord{ .x=4, .y = 5}; // Ok with C++20
Run Code Online (Sandbox Code Playgroud)

但这是行不通的(请参见上面的引用):

auto a = Coord{ .y=5, .x = 4}; // ERROR
Run Code Online (Sandbox Code Playgroud)

对于不同的顺序,您必须定义一个构造函数或一个辅助函数。

编译器资源管理器中尝试一下。