如何正确地重载算术运算符,以便" 3" +" 4"可以是" 7"在c ++中

时间:2016-05-05 02:35:29

标签: c++ operator-overloading

我用

重载了
string operator+(string a, string b);

当我这样做时它起作用:

string a = "3";
string b = "4";
cout << a + b;

然而,当我这样做时,它失败并出现错误信息:二进制表达式的无效操作数(const char *和const char *)

cout << "3" + "4";

有人可以告诉我如何解决这个问题吗?

感谢回复,我明白为什么会出现错误,我不应该在c ++中重载操作符是哪种操作数是内置类型。

1 个答案:

答案 0 :(得分:4)

除非您将至少一个参数设置为用户定义的类型,否则您不能重载运算符,因此您所要求的是不可能的。但是,最接近您的语法可能是使用用户定义的文字。在C ++ 14中,s后缀定义为创建std::string

using namespace std::string_literals;
std::cout << "3"s + "4"s;

如果您不能使用C ++ 14,但可以使用C ++ 11,那么您可以定义自己的文字后缀。

std::string operator""_s (const char* cs, size_t)
{
    return std::string(cs);
}