如果是全局函数,怎么知道要传入哪个参数呢?

请问

std::ostream& operator<< (std::ostream& _cout, hstring& hstr)
像这种重载
std::cout<<hstr;
这个<<是怎么判断自己两个参数在左边还是在右边呢?我的意思是,它的参数仅限自己的左右吗?如果重载运算符,有三个参数,那该怎么处理,除了相邻两个,还有一个在哪里去寻找呢

其实我也说不清这个问题,就是说比如
hstring& hstring::operator=(const hstring& hstr)
hstr=hstr2
这里就很容易看出是hstr.operator=,但是如果是全局函数,怎么知道要传入哪个参数呢?

基于Monster 组和GPT的调写:

  • 对于重载运算符<<,它的左侧参数通常是std::ostream&类型,右侧参数可以是任意类型。在执行类似std::cout<<hstr;这样的表达式时,编译器会将表达式解释为operator<<(std::cout, hstr)的调用,其中std::cout作为左侧参数传递给operator<<函数,hstr作为右侧参数传递给operator<<函数。
  • 如果要重载一个有三个参数的运算符,例如operator()(int x, int y, int z),那么该运算符的调用方式将类似于obj(x, y, z),其中obj是一个对象,x,y,z是该运算符的参数。在这种情况下,第一个参数obj将自动成为该运算符函数的隐式this指针,其余的参数将按顺序传递给该函数作为明确的参数。
  • 对于类似hstr=hstr2的表达式,它将被解释为hstr.operator=(hstr2)的调用,其中hstr2作为右侧参数传递给operator=函数,hstr本身则被隐式地视为this指针传递给operator=函数。对于全局函数,要将它们的参数显式传递,例如operator=(hstr, hstr2),其中第一个参数hstr是要被赋值的对象,第二个参数hstr2是要赋的值。