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

C++中能否通过一行代码继承基类的全部运算符?

基类构造函数与运算符的继承问题

我们知道,在C++中可以通过以下代码让派生类继承基类的所有构造函数:

class DerivedClass : public BaseClass {
public:
    using BaseClass::BaseClass;
    ...
};

那能不能用类似的一行代码,让派生类继承基类的全部运算符呢?

无法编译的示例代码

下面是一段编译失败的代码:

#include <string>
#include <memory>

using std::string;

struct A : string
{
    using string::string;
};

int main()
{
    std::shared_ptr<string> str;
    *str = 'a';

    std::shared_ptr<A> a;
    *a = 'a'; // 错误:E0349 没有匹配的运算符"="
}

这段代码里,*a = 'a'会报错,原因是派生类A并没有继承基类string的赋值运算符。

修改后可编译的代码

如果把类A的定义改成如下形式,代码就能正常编译运行:

struct A : string
{
    using string::string;
    using string::operator=;
};

结论

不能通过单一的一行代码继承基类的全部运算符。C++标准里,using Base::Base是针对构造函数的特殊语法,可以一次性引入基类所有构造函数;但对于运算符,并没有类似的批量引入语法,必须针对具体的运算符(比如operator=)单独写using声明,才能让派生类继承对应的运算符重载。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 17:55:28