在C ++ 1y / C ++ 14标准中,它是否说下面的翻译单元格式不正确?
struct S {};
void operator+(S,S,S);
错误是:
error: ‘void operator+(S, S, S)’ must take either one or two arguments
答案 0 :(得分:5)
[over.unary]
1前缀一元运算符应由非静态成员实现 函数(9.3)没有参数或非成员函数 1 参数即可。因此,对于任何前缀一元运算符@,@ x都可以 解释为x.operator @()或operator @(x)。如果两种形式 已声明了运算符函数,规则见13.3.1.2 确定使用哪种解释(如果有的话)。见13.5.7 解释后缀一元运算符++和 - 。
[over.binary]
1二元运算符应由非静态成员实现 带有一个参数的函数(9.3)或带有两个的非成员函数 参数即可。因此,对于任何二元运算符@,x @ y可以解释为 x.operator @(y)或operator @(x,y)。如果两种形式的运营商 函数已经声明,13.3.1.2中的规则确定哪个,如果 任何,使用解释。