任何人都可以在这行代码中向我解释这个奇怪的一点吗?
ClassA :: ClassA(std :: string aName) :name(aName)
显然,这是该类的声明
class ClassA
{
public:
std::string name;
ClassA(std::string aName);
};
奇怪的代码行出现在它的cpp文件中
ClassA::ClassA(std::string aName) : name(aName)
这不是多态吗?但那么,它是什么?
答案 0 :(得分:6)
这是一个带有初始化列表的构造函数:
ClassA::ClassA(std::string aName)
: name(aName) // constructor initialization list
{
// ctor body. name is already initialized here
}
这意味着数据成员name
的初始化值为aName
。
与多态性正交。
答案 1 :(得分:3)
它是成员初始化程序。会员
std::string name;
将与aName
一起启动
使用它允许跳过std :: string的默认构造函数,否则将使用它,因此这消除了一些开销。另一种选择是
ClassA::ClassA(std::string aName)
{
// name is fist constucted with default constructor
name = aName; // value is assigned with operator =
}
这通常较慢,应该避免
答案 2 :(得分:0)
这只是初始化列表。指定构造函数时,可以在此列表中初始化成员变量。
答案 3 :(得分:0)
它是initialization list,这是一种在C ++中初始化成员变量的简洁明了的方法