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

C++中能否将运算符赋值给变量并用于表达式运算?

C++能否将重载的运算符赋值给变量并像运算符一样使用?

首先明确:C++不支持直接用变量替代运算符符号(比如f1 o f2这种写法),但可以通过函数指针或函数对象的方式,实现「将运算符逻辑赋值给变量,再通过变量调用运算」的核心需求。

方法1:使用函数指针

你的operator+和operator-都是全局重载的二元运算符,它们的函数签名是Foo& (const Foo&, const Foo&)。可以直接用对应类型的函数指针来存储它们:

// 定义别名简化函数指针类型
using FooBinaryOp = Foo& (*)(const Foo&, const Foo&);

// 根据条件选择对应的运算符函数
FooBinaryOp op = positive ? operator+ : operator-;

// 调用方式:把函数指针当作普通函数调用
Foo f1{...};
Foo f2{...};
Foo& result = op(f1, f2);

方法2:使用std::function(更灵活)

如果需要兼容更多场景(比如结合lambda、参数绑定等),可以用C++标准库的std::function(需包含头文件<functional>):

#include <functional>

// 定义函数对象类型
std::function<Foo&(const Foo&, const Foo&)> op = positive ? operator+ : operator-;

// 调用方式和函数指针一致
Foo& result = op(f1, f2);

为什么不能用f1 o f2这种写法?

C的运算符是语法层面的固定符号,只能重载预定义的运算符(比如+、-),无法将自定义变量当作运算符符号来使用。f1 o f2这种形式在C语法中是不合法的,编译器无法识别变量o作为运算符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 12:59:51