我一直在翻阅SFML蓝图书,开始让我的脚在图形中弄湿。我注意到他们的游戏类构造函数中的一个代码示例:
kill -- -$(ps -o pgid= $PID | grep -o [0-9]*)
将 _window(sf :: VideoMode(800,600)," SFML标题")放在{}之前,而不是放在内部。这是不好的做法吗?这叫做什么?我还是c ++的新手,但我还没有遇到过这样的事情。
答案 0 :(得分:2)
这是不好的做法吗?
不,这是一个很好的做法。如果成员是const
限定类型或引用类型,则它是在构造函数中初始化该成员的唯一方法。
这是做什么的?
答案 1 :(得分:1)
这称为成员初始化列表。它们是C ++语言的一部分。成员初始化列表允许您在类初始化期间初始化成员。他们是良好实践的一个原因是因为他们允许您在分配时初始化const
成员不起作用。例如,以下类定义不起作用,因为const int member1
未使用值初始化,也不能分配给const int
,因为const
使其成为只读。
class Game{
private:
const int member_var; //won't work, needs to be initialized
int member_var2;
public:
Game() {} //Game constructor
};
使用初始化列表,您可以通过在构造函数定义之后添加冒号(但在括号之前定义它)并根据需要初始化成员来初始化const
成员,如这些和其他变量初始化(使用“()”)或统一初始化(使用“{}”)。要初始化多个成员,请用逗号分隔。
class Game{
private:
const int member_var;
int member_var2;
public:
Game(): member_var(1), member_var2(2) {}
//Uniform initialization is ": member_var{1}, member_var{2}"
};
在您的示例中,Game()
构造函数在类定义之外(可能在另一个.cpp文件中)通过Game::Game()
和成员初始化列表定义。我猜_window
是一个带有一个构造函数的类,它以sf::VideoMode(800,600)
和"SFML Title"
作为参数。