Boost Asio示例-奇怪的C ++语法

| 我刚刚看过boost asio框架和示例。在Daytime.3-异步TCP日间服务器的源代码中,该代码为tcp_server类定义了一个构造函数,如下所示:
tcp_server(boost::asio::io_service& io_service) : acceptor_(io_service, tcp::endpoint(tcp::v4(), 50500))
我对构造函数如何初始化acceptor_实例变量感到困惑,后者在稍后的私有部分中定义?我想在构造函数的主体中编写用于此初始化的等效代码(仅用于学习),但是我无法弄清楚该ivar是如何初始化的。 非常感谢您的任何帮助。     
已邀请:
        嗯..为什么不可以呢?成员变量在整个类中都是可见的,无论它们在何处定义:
class Foo{
public:
  Foo(int i) : _i(i) {}

private:
  int _i;
};
如果您是想在冒号
:
之后进行初始化时如何工作,请使用标准措辞搜索\“ initializer list \” / \“ ctor initializer \”。 编辑:考虑此类:
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主体内部无法再对其进行分配。您只能使用非常量和非引用变量来执行此操作:
class Bar{
public:
  Bar(){
    _f = Foo(random(), 3.14159f); // invoke copy assignment operator
  }

private:
  Foo _f; // non-const
};
如果这没有帮助,我想您真的不会表达您不了解的内容。     

要回复问题请先登录注册