假设我有班级:
class foobar {
public:
foobar(int _x, int _y) {
x = _x;
y = _y;
}
int x, y;
};
有没有办法将x和y分配给传递给foobar(int,int)的值而不是自己分配它们?
[答案] 初始化列表是我需要使用的(感谢所有人澄清)
我可以这样编写代码:
class foobar {
public:
foobar(int x, int y) : x(x), y(y) {}
int x, y;
};
这意味着我不必强调我的输入参数x(x)将按预期工作
答案 0 :(得分:2)
您可以使用member-initialization-list。这仍然是你的工作,但这是一个更好的做法:
foobar(int _x, int _y): x(_x), y(_y) {
// ^^^^^^^^^^^^^^
}
如果您真的不想分配这些值,可以使用没有构造函数的类(aggregate class)初始化这些成员:
class foo
{
public:
int x, y;
};
foo{1, 2}; // <= Braces initialization
工作示例:http://ideone.com/NlbkKb。
答案 1 :(得分:2)
如果您的类是聚合,则可以使用大括号语法对其进行初始化:
class foobar
{
public:
int x;
int y;
};
foobar f { 1, 2 };
否则,您应该初始化构造函数中的元素:
class foobar
{
public:
foobar(int x_, int y_) : x(x_), y(y_) { }
private:
int x;
int y;
};
foobar f(1, 2);
(您也可以在第二种情况下使用大括号语法。)