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
相关产品推荐
相关产品推荐

