C++中有没有一种方法可以通过指定列表中的每个成员变量来构造对象



我记得在大学里,有一种方法可以通过编写一系列成员变量来初始化对象,用逗号分隔,就像下面的代码示例中那样,但我记不清它是如何调用的。

class A
{
public:
string s1, s2, s3;
A()
{
}
};
#include "A.h"
int main()
{
A a
{
s1 = "String1",
s2 = "String 2",
s3 ="String 3"
}
}

为了使类似构造函数的列表工作,我还应该键入什么?

C++中没有,但C99确实支持这一点(指定的初始化程序(。

struct point { int x, y; };
struct point p = { .y = yvalue, .x = xvalue };

https://gcc.gnu.org/onlinedocs/gcc/Designated-Inits.html

您的代码,带有正确的构造函数:

class A
{
public:
string s1, s2, s3;
A(string a, string b, string c): s1{a},s2{b},s3{c}
{
}
};

现在您可以将此类的对象初始化为:

A a("String1","String2","String3");

如果您感兴趣,可以从这里参考:https://en.cppreference.com/w/cpp/language/initializer_list

如果你想要命名参数,那么C++没有命名参数,下面是一个可能在未来实现的建议(它不在C++17中(:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4172.htm

如果你仍然想要命名的参数,这里有一篇关于如何让它工作的FluentApp文章:https://www.fluentcpp.com/2018/12/14/named-arguments-cpp/

最新更新