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

时间:2011-06-13 00:25:06

标签: c++ constructor instance-variables ctor-initializer

我刚刚看过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是如何被初始化的。

非常感谢您的任何帮助。

1 个答案:

答案 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
};

如果这没有任何帮助,我猜你真的不表达你不理解的东西。