是否应该使用全局函数? 请问基本问题:C++中,所有函数都应该在类或非全局命名空间内吗?在什么样的情况下应该编写全局函数?

是否应该使用全局函数? 请问基本问题:C++中,所有函数都应该在类或非全局命名空间内吗?在什么样的情况下应该编写全局函数?,c++,function,C++,Function,在类之外定义函数可能有助于运算符重载(具体来说,代码>操作符< P>这取决于你。如果你是从一个更严格的面向对象语言,如java,你会发现它可能是坏的风格,使用全局函数而不是类方法,但是有很多的全局函数的用例。只要像你想要的那样编码它,C++对于不同的编程是相当开放的。范例和风格 如果它在语义上应该是一个全局函数,那么就把它变成一个全局函数,而不是一个方法或静态方法。操作符和具有操作符语义的普通函数就是一个很好的例子。看看STL算法,为什么它们是全局的?因为它们不属于一个容器。为什么它们不是只有静

在类之外定义函数可能有助于运算符重载(具体来说,代码>操作符< P>这取决于你。如果你是从一个更严格的面向对象语言,如java,你会发现它可能是坏的风格,使用全局函数而不是类方法,但是有很多的全局函数的用例。只要像你想要的那样编码它,C++对于不同的编程是相当开放的。范例和风格

如果它在语义上应该是一个全局函数,那么就把它变成一个全局函数,而不是一个方法或静态方法。操作符和具有操作符语义的普通函数就是一个很好的例子。看看STL算法,为什么它们是全局的?因为它们不属于一个容器。为什么它们不是只有静态方法的类的一部分?Bec因为它没有任何优势,而不是用面向对象的错觉来迷惑每个人


编辑:好吧,我想名称空间是另一回事。当你设计一个库或其他你还不知道的代码中包含的东西时,最好将东西打包到名称空间中,以避免污染全局名称空间。但至少我认为操作符不应该在名称空间中(如果我错了,请纠正我)否则,如果不使用命名空间,它们将无法工作,这通常是个坏主意。但在构建独立程序时,实际上不需要使用自己的命名空间。

在“类外”和“命名空间外”之间存在巨大差异类外:尽可能经常,命名空间外:可能永远不会。但是这个问题应该按要求关闭。相关:为什么应该关闭?我的问题不够酷吗?@vorbis5-是的,但答案说“这取决于”:-)只有四个人投票决定在8小时内关闭。如果没有其他人同意,这个问题显然是可以的。非常糟糕的问题通常在几分钟内关闭。STL算法在
名称空间std
内。好的,名称空间是另一回事。@Christian Rau:问题是“所有函数是否都在一个类或名称空间内?”,你的STL算法是全局的例子不是一个好例子。@Johnsyweb好的,也许我太专注于类了。我在名称空间上附加了一段。依赖参数的查找确保即使隐藏在名称空间中,重载运算符也不会被发现,只要它与争论。不需要友谊,除非实现需要
template <class T>
void
display (T obj)
{
  obj.display ();
}