簡體   English   中英

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

[英]Boost Asio example - strange C++ syntax

我剛剛查看了 boost asio 框架和示例。 Daytime.3 - An asynchronous TCP daytime server的源代碼中,代碼為 tcp_server class 定義了一個構造函數,如下所示:

tcp_server(boost::asio::io_service& io_service) : acceptor_(io_service, tcp::endpoint(tcp::v4(), 50500))

我對構造函數如何初始化稍后在私有部分中定義的acceptor_實例變量感到困惑? 我想在構造函數的主體中為這個初始化編寫等效的代碼(只是為了學習),但我不知道這個 ivar 是如何被初始化的。

非常感謝您的幫助。

嗯..為什么它不能這樣做? 成員變量在整個 class 中都是可見的,無論它們在哪里定義:

class Foo{
public:
  Foo(int i) : _i(i) {}

private:
  int _i;
};

如果您的意思是在冒號:之后初始化的事情是如何工作的,如果您想要標准措辭,請搜索“initializer list”/“ctor initializer”。


編輯:考慮這個 class:

class Foo{
public:
  Foo(int i, float f) : _i(i), _f(f) {}

private:
  int _i;
  float _f;
};

現在考慮這個 function 和其他 class:

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

如果這沒有任何幫助,我猜你真的沒有表達你不明白的東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM