C++ - 参考放在哪里?

C++ - Reference where to put it?

您好,我有一个基本问题,很抱歉,如果它是重复的,但我似乎无法通过 google 找到我要找的东西。

我有这个函数签名:

ostream& operator<<(ostream& o, const Test& t) {...}

引用“&”的顺序让我感到困惑,因为有时它在函数的前面 name/arguments 而不是:

ostream &operator<<(ostream &o, const Test &t) {...}

这有什么区别或有不同的含义吗? 任何解释都会很棒,谢谢!

编辑:它们在编译时似乎都工作正常,但我应该使用哪一个?

does this make any difference or has a different meaning?

没有区别。

Any explanation would be brilliant

一般来说,white-space只会改变程序中需要分隔记号的地方的意义。 & 等标点符号不需要与字母数字符号分开,因此您将在此处获得相同的符号序列(ostream&o),但是您 space他们。

which one should I be using?

哪个看起来更吸引你。或者,如果您在封建环境中工作,则由您的领主指挥。

就我个人而言,我把space放在修饰符的两边,因为我认为它是一个单独的"word"到其他标记。其他人有不同的审美,将其视为修改类型或变量,并相应地space它。

这纯粹是一种风格问题,最重要的是,您应该尝试在您自己的代码中保持一致,或者在您为提高可读性而维护的代码中保持一致。

关于哪个最好,存在不同的哲学观点。 ostream& o 提请注意对象 o 具有类型 ostream& 这一事实,而 ostream &o 更暗示 o 是对 ostream.

就我个人而言,我喜欢把它贴在字体的末尾。

两者没有区别,完全一样。空格无关紧要,唯一重要的是 &ostreamoperator<< 之间 所有这些都是等价的:

ostream& operator<<(ostream& o, const Test& t) {...}
ostream & operator<<(ostream & o, const Test & t) {...}
ostream &operator<<(ostream &o, const Test &t) {...}
ostream & operator<<(ostream  & o, const Test    & t) {...} 

以及您能想到的其他组合。