【发布时间】:2011-09-13 14:46:32
【问题描述】:
我刚刚查看了 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 是如何被初始化的。
非常感谢您的任何帮助。
【问题讨论】:
-
你在问initialization lists,我想。
-
@Nemo:这不是“初始化列表”。这是
ctor-initializer。 -
@James:您不能在 ctor 主体中初始化任何类成员。在 ctor 主体运行时,所有成员都已构建完毕。您必须在
ctor-initializer中执行初始化。 -
@Nemo:“错误”无疑有点牵强(尽管严格来说,标准支持我),但它非常令人困惑。初始化列表通常被认为类似于
int x[3] = { 0, 1, 2 };或std::vector<int> v{0,1,2};。ctor-initializers 是完全不同的东西,因此,“初始化列表”一词对他们来说并不理想。 -
伙计们,我得到了初始化列表的东西,但我对这种情况感到困惑。 acceptor_ 是一个对象实例,但该实例似乎是在初始化列表中以某种方式构造的(传入参数 io_service 和一个 tcp::endpoint 实例)。
标签: c++ constructor instance-variables ctor-initializer