在类构造函数中使用":" "{}"之前声明变量
Declaring variables before "{}" using ":" in class constructer
我一直在翻阅SFML蓝图书,开始在图形方面动手。我注意到他们在游戏类构造函数中的一个代码示例:
Game::Game() : _window(sf::VideoMode(800,600), "SFML Title") {
code code code...
}
_window(sf::VideoMode(800,600), "SFML Title")放在{}之前,而不是在里面。这种做法不好吗?这叫什么?我还是c++的新手,但我还没有遇到过这样的东西
这种做法不好吗?
不,这是很好的练习。如果成员是const
限定类型或引用类型,这是在构造函数中初始化该成员的唯一方法。
这叫什么?
它叫做成员初始化列表
这叫做成员初始化列表。它们是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()
构造函数是通过带有成员初始化列表的Game::Game()
在类定义之外定义的(可能在另一个.cpp文件中)。我猜_window
是一个类与一个构造函数,以sf::VideoMode(800,600)
和"SFML Title"
作为参数。
相关文章:
- 在疯狂的部分中声明变量
- 如何在C++中为高分辨率时钟声明变量?
- 在命名空间中声明变量,在 main 中定义它,使其对所有其他文件可见
- CUDA 的性能取决于声明变量
- 如何在不为其声明变量的情况下获取和使用常量值的地址?
- C++声明变量时自动类型推断而不初始化
- 在不同循环中多次声明变量的优点
- 奇怪的错误 C2131 与 constexpr 声明变量
- 是否可以在 "if" 语句中声明变量?
- 在python-ctypes中声明变量并传递给dll函数
- 在递归函数C++中声明变量
- 只有一个定义/声明时标头声明变量的多堆定义错误
- 奇怪的未声明变量编译器错误
- 我在C++程序中声明变量时遇到问题
- 在命名空间中声明变量
- C++ lambda 按值捕获,而无需更早声明变量
- 声明变量以保存字符串列表时的内存分配
- 如何声明C 变量应突变
- 为什么允许在开关语句中声明变量?但不是声明 初始化
- 在同一命名空间中声明变量和函数是否出错?[C++]