You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Boost 1.72.0 time_duration隐式拷贝赋值运算符弃用编译错误修复咨询

修复Boost 1.72.0中time_duration拷贝赋值运算符弃用的编译错误

问题根源

Boost 1.72.0的boost::posix_time::time_duration类(包括其派生类如microseconds)存在用户声明的拷贝构造函数,根据C++11及以后标准,编译器会隐式弃用其拷贝赋值运算符。当开启-Werror,-Wdeprecated-copy编译选项时,对该类型成员执行赋值操作就会触发错误。

修复方法

1. 升级Boost版本(推荐)

Boost在1.73.0及后续版本中,已经为time_duration显式添加了拷贝赋值运算符,彻底修复了这个问题。直接升级到最新稳定版Boost是最一劳永逸的解决方案。

2. 临时禁用特定编译警告

如果暂时无法升级Boost,可以针对涉及time_duration赋值的代码块禁用-Wdeprecated-copy警告:

// GCC/Clang 编译器
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-copy"
// 包含time_duration赋值操作的代码
boost::posix_time::time_duration td;
td = boost::posix_time::microseconds(100);
#pragma GCC diagnostic pop

MSVC编译器对应指令:

#pragma warning(push)
#pragma warning(disable: 4996) // 需根据实际警告码调整
// 赋值代码
#pragma warning(pop)

3. 使用swap替代直接赋值

利用time_duration的swap成员函数转移值,避免触发拷贝赋值运算符:

boost::posix_time::time_duration td;
boost::posix_time::microseconds us(100);
td.swap(us);

类成员赋值场景示例:

class MyClass {
    boost::posix_time::time_duration m_td;
public:
    void set_duration(const boost::posix_time::microseconds& duration) {
        boost::posix_time::time_duration temp(duration);
        m_td.swap(temp);
    }
};

4. 直接初始化而非赋值

如果逻辑允许,尽量在定义时直接初始化time_duration对象,避免后续赋值:

// 直接初始化,替代先定义后赋值
boost::posix_time::time_duration td = boost::posix_time::microseconds(100);

内容的提问来源于stack exchange,提问作者q0987

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 09:59:54