所以当我遇到这个时,我只是在浏览库的源代码。
Font::Font(const sf::Font& font) :
m_font{std::make_shared<sf::Font>(font)}
{
}
我不懂语法
m_font{..}
这是什么?它有什么作用。如果这是一个非常愚蠢的问题,我很抱歉。我不知道谷歌会怎么做,所以问这里。
答案 0 :(得分:19)
这在cppreference中有描述,但有点难以理解:
任何构造函数的函数定义的主体,在复合语句的左大括号之前,可能包含成员初始化列表,其语法为冒号字符
:
,后跟以逗号分隔的一个或多个成员初始值设定项的列表,每个成员初始值设定项...
class-or-identifier brace-init-list (2)(自C ++ 11起)
...
2)使用list-initialization初始化由 class-or-identifier 命名的基类或成员(如果列表为空则变为值初始化,初始化聚合时进行聚合初始化)
这是试图说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
类成员的值。
答案 1 :(得分:9)
这是一个list initialization又名大括号列表。更具体地说,在这种情况下,它是直接列表初始化。
基本上,m_font
变量使用花括号中给出的值进行初始化,在这种情况下,它被初始化为shared_ptr
,用于赋予构造函数的font
对象。 / p>
答案 2 :(得分:7)
类Font
有一个名为m_font
的{{1}}类型的成员,所以在类std::shared_ptr<sf::Font>
的构造函数中,该成员正在使用指向{的共享指针进行初始化{1}}。