所以我只是在浏览一个库的源代码时遇到了这个。
Font::Font(const sf::Font& font) :
m_font{std::make_shared<sf::Font>(font)}
{
}
我不理解这个语法。
m_font{..}
这是什么?它是做什么的?如果这是一个非常愚蠢的问题,我很抱歉。我不知道要搜索什么,所以在这里问。
所以我只是在浏览一个库的源代码时遇到了这个。
Font::Font(const sf::Font& font) :
m_font{std::make_shared<sf::Font>(font)}
{
}
我不理解这个语法。
m_font{..}
这是什么?它是做什么的?如果这是一个非常愚蠢的问题,我很抱歉。我不知道要搜索什么,所以在这里问。
这在cppreference上有描述,但格式有些难以阅读:
任何构造函数的函数定义体,在复合语句的左花括号之前,都可以包含成员初始化列表,其语法为冒号字符
:
,后跟一个或多个逗号分隔的成员初始化器列表,每个初始化器具有以下语法...
类或标识符花括号初始化列表 (2) (自C++11起)
...
2) 使用列表初始化(如果列表为空,则变为值初始化;当初始化聚合时,变为聚合初始化)初始化由类或标识符命名的基类或成员
这是想说的是,X::X(...) : some_member{some_expressions} { ... }
会导致some_member
类成员从some_expressions
中初始化。给定
struct X {
Y y;
X() : y{3} {}
};
数据成员y
将以与本地变量Y y{3};
初始化完全相同的方式进行初始化。
在您的情况下,std::make_shared<sf::Font>(font)
生成的值将用于初始化m_font
类成员。
m_font
变量的值是用花括号中给定的值进行初始化的,在这种情况下,它被初始化为一个shared_ptr
,指向构造函数中给定的font
对象。Font
类有一个成员叫做m_font
,类型为std::shared_ptr<sf::Font>
,因此在Font
类的构造函数中,该成员被初始化为指向font
的共享指针。