我刚刚看过boost asio框架和示例。在Daytime.3 - An asynchronous TCP daytime server的源代码中,代码为tcp_server类定义了一个构造函数,如下所示:
tcp_server(boost::asio::io_service& io_service) : acceptor_(io_service, tcp::endpoint(tcp::v4(), 50500))
我对构造函数如何初始化后面在私有部分中定义的 acceptor _ 实例变量感到困惑?我想在构造函数体内编写这个初始化的等效代码(仅用于学习),但我无法弄清楚这个ivar是如何被初始化的。
非常感谢您的任何帮助。
答案 0 :(得分:3)
class Foo{
public:
Foo(int i) : _i(i) {}
private:
int _i;
};
如果你想在冒号:
之后初始化事件如何工作,如果你想要标准的措辞,请搜索“初始化列表”/“ctor初始化器”。
修改:请考虑此课程:
class Foo{
public:
Foo(int i, float f) : _i(i), _f(f) {}
private:
int _i;
float _f;
};
现在考虑这个功能和其他类:
int random(){
return 4;
}
class Bar{
public:
Bar() : _f(random(), 3.14159f) {}
private:
const Foo _f;
};
您可以根据需要初始化初始化列表中的成员,假设该成员具有拟合构造函数。现在,对于const
成员,您只能 以这种方式初始化它们,因为在ctor体内,它不能再被分配。你只能用非const和非引用变量来做到这一点:
class Bar{
public:
Bar(){
_f = Foo(random(), 3.14159f); // invoke copy assignment operator
}
private:
Foo _f; // non-const
};
如果这没有任何帮助,我猜你真的不表达你不理解的东西。