[英]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.