C++ 运算符重载,表达式中空格的规则

C++ operators overload, rules for spaces in expression

我想了解规则(如果有的话)关于使用spaces的正确书写运算符重载.

我见过不同的形式:

T operator+(T t1, T t2)   /* etc. */
T operator+ (T t1, T t2)  /* etc. */
T operator +(T t1, T t2)  /* etc. */
T operator + (T t1, T t2) /* etc. */

我说的是 operator 关键字、运算符字符和第一个括号之间的 space(s)。

哪一个是正确的?比其他人更喜欢什么?其中一些是错误的,还是在某些情况下是正确的而在其他情况下是错误的(反之亦然)?

简而言之:space 在这里有什么特殊含义吗(在这个特定主题中(我不问一般在代码中使用 space)?

如果是,什么时候,为什么?如果不是,什么是最佳实践?

除了在字符和字符串文字中,白色space在C++代码中唯一重要的地方是分隔,否则将(或可能)合并。

在您的情况下,三个标记 operator+( 之间有明显的区别,因此添加的 space 字符没有任何区别编译器将如何解释声明。

但是,Toperator+(T t1, T t2) 之类的内容无效,因为 Toperator 现在将被视为 单个 (标识符) 令牌。

至于哪一个是“最好的”——这确实是一个品味和意见的问题,尽管 cppreference 通常使用“不 space” 选项来进行重载声明。