C++ 在C+中通过构造函数调用中的命名参数分配类变量+;

C++ 在C+中通过构造函数调用中的命名参数分配类变量+;,c++,C++,我是C#出身。在那里,我可以这样做: Callback callback = new Callback { src = src, callbackPtr = callbackPtr }; 假设只有一个空构造函数: Callback(){} 这两个变量都是公共的 C++中有类似的东西吗?还是我必须在这里创建参数化构造函数?< /P> < p>你可以做: Callback* callback = new Callback {

我是C#出身。在那里,我可以这样做:

Callback callback = new Callback
    {
        src = src,
        callbackPtr = callbackPtr
    };
假设只有一个空构造函数:

Callback(){}
这两个变量都是公共的

C++中有类似的东西吗?还是我必须在这里创建参数化构造函数?< /P> < p>你可以做:

Callback* callback = new Callback
    {
        src,
        callbackPtr
    };
假设
Callback
中的字段按顺序具有相同的数据类型,并且-注意-这些字段必须是公共的。

您可以执行以下操作:

Callback* callback = new Callback
    {
        src,
        callbackPtr
    };

假设
Callback
中的字段具有相同的数据类型(按顺序排列),并且-大警告-字段必须是公共的。

如果
Callback
是纯旧数据(POD)类型,则可以执行以下操作:

Callback callback = {src, callbackPtr};
它使用结构初始化语法。它假定类定义中按该顺序列出了
src
callbackPtr


这在C++03和C++11中都适用。在C++11中,非POD类可以通过定义一个构造函数来使用此语法,该构造函数采用
std::initializer_list

如果
回调
是纯旧数据(POD)类型,则可以执行以下操作:

Callback callback = {src, callbackPtr};
它使用结构初始化语法。它假定类定义中按该顺序列出了
src
callbackPtr


这在C++03和C++11中都适用。在C++11中,非POD类可以通过定义一个构造函数来使用这种语法,该构造函数采用
std::initializer_list

,您能解释一下它在C#中对我们这些不知道它的人意味着什么吗?顺便说一句,这是C#中一个相当新的特性,在您必须编写
Callback=new Callback()之前;callback.src=src;callback.callbackPtr=callbackPtr。。。这个想法也在C++中工作。@ KerrekSB是一个默认构造函数,它有命名成员<代码> SRC < /C>和<代码> CalbAppTrp>代码>。在C++中,这是非常危险的。你能解释它在C语言中的含义吗?对于我们不知道的人来说,BTW是C语言中一个新的特性,在你必须编写<代码>回调回调=新的回调()之前。callback.src=src;callback.callbackPtr=callbackPtr。。。这个想法也在C++中工作。@ KerrekSB是一个默认构造函数,它有命名成员<代码> SRC < /C>和<代码> CalbAppTrp>代码>。这将是非常危险的C++。我正在接收“没有匹配的初始化构造函数”编译错误。尽管我定义了空的ctor:Callback(){},但它使用统一构造函数语法调用了一个双参数构造函数。它与C#构造不同,但是使用它比新回调(src,callbackPtr)有什么好处呢?我试图避免使用参数化的ctor。除了统一表示法之外,没有任何好处,除非您处理的是模板代码。如果
Callback
是聚合,这将起作用<代码>类
与结构没有关系。有公共成员变量和没有构造函数并不重要。我收到“没有匹配的初始化构造函数”编译错误。尽管我定义了空的ctor:Callback(){},但它使用统一构造函数语法调用了一个双参数构造函数。它与C#构造不同,但是使用它比新回调(src,callbackPtr)有什么好处呢?我试图避免使用参数化的ctor。除了统一表示法之外,没有任何好处,除非您处理的是模板代码。如果
Callback
是聚合,这将起作用<代码>类与结构没有关系。拥有公共成员变量而没有构造函数并不重要。在C++11中,它也可以用于具有双参数构造函数的类。在C++11中,它也可以用于具有双参数构造函数的类。