我想知道我是否可以写,例如:<<(object, cout);
或者<<(cout,object);
object 是一个用户定义的类,它有<<
运算符重载,就像人们可以写:
int a = +(2,3);
并获得预期的结果,如int a = 2 + 3;
. 此外,如果这是可能的,但需要几个步骤,应该怎么做?是否应该<<
使用两种不同的签名使运算符重载?
问问题
52 次
2 回答
2
就像人们可以写的那样: int a = +(2,3); 并获得预期的结果,如 int a = 2 + 3;
不,你有误会。+(2, 3)
将通过逗号运算符的关联性并将+3
(3) 分配给变量a
。
因此,int a = +(2, 3)
与 相同int a = 3
,而不是int a = 2 + 3
我想知道我是否可以写,例如: <<(object, cout); 或 <<(cout,object);
不,你不能。
如果您想以这种方式使用运算符,则应调用其完全限定名称,例如:
operator+
代替+
operator<<
代替<<
笔记:
这不适用于基本数据类型。当您使用这些运算符的重载版本时,请注意类范围和命名空间。
于 2020-04-05T15:58:06.350 回答
1
你可以这样做,例如
operator<<(std::cout, "hi");
这个表达
int a = +(2, 3);
不是在做operator+
。它首先应用,
序列运算符,得到3
,然后应用一元运算符,+
得到 3。
你不能这样做
int a = operator+(2, 3); // error
因为int
s 是基本类型。
如果您有用户定义的类型S
,则以下代码段具有相同的含义
S s{};
std::cout << s;
auto x = s + s;
是相同的
S s{};
operator<<(std::cout, s);
auto x = operator+(s, s);
假设运算符是为 定义的S
,则将调用正确的运算符。
于 2020-04-05T15:58:48.843 回答