gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 03:06:46 29 4
gpt4 key购买 nike

我刚刚查看了 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))

我对构造函数如何初始化稍后在私有(private)部分中定义的 acceptor_ 实例变量感到困惑?我想在构造函数的主体中为这个初始化编写等效代码(仅供学习),但我无法弄清楚这个 ivar 是如何初始化的。

非常感谢您的帮助。

最佳答案

嗯.. 为什么它不能这样做?成员变量在整个类中都是可见的,无论它们在哪里定义:

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

private:
int _i;
};

如果你的意思是 while initialization thing 在冒号 : 之后是如何工作的,如果你想要标准的措辞,请搜索“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
};

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

关于c++ - Boost Asio 示例 - 奇怪的 C++ 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6325644/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com