gpt4 book ai didi

c++ - 成员初始化列表 vs 赋值/复制构造函数(在 boost deadline_timer 中)

转载 作者:行者123 更新时间:2023-11-30 03:38:47 24 4
gpt4 key购买 nike

我有以下类声明:

class A {
public:
A();
private:
boost::asio::io_service io;
boost::asio::deadline_timer t;
};

A 类的以下构造函数工作正常:

A::A() : t(io) {
// do stuff
}

但是当我写这个的时候:

A::A() {
t(io);
// do stuff
}

我收到以下错误:

error: no match for call to ‘(boost::asio::deadline_timer {aka boost::asio::basic_deadline_timer}) (boost::asio::io_service&)

可能是因为 boost::asio::deadline_timer 的复制构造函数没有定义。但是在成员初始化列表的情况下会发生什么?它不使用复制构造函数吗?

关于成员初始化列表中使用的机制与我们在类构造函数中使用赋值/复制构造函数时的机制,我的问题可能会更笼统。

最佳答案

问题与复制构造函数无关,您根本没有调用它。重点是两个 t(io) 不是一回事。

成员初始化列表中的

t(io)表示构造函数以io为参数构造t。 (我想 boost::asio::deadline_timer 有一个以 boost::asio::io_service 作为参数的构造函数。)

t(io) 在构造函数体中是一个语句,表示调用t 作为仿函数,传递io 作为它的参数。它失败是因为 boost::asio::deadline_timer 不支持这种仿函数行为。

关于c++ - 成员初始化列表 vs 赋值/复制构造函数(在 boost deadline_timer 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39288624/

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