这两个声明之间有什么区别?
class foo
{
public:
static void bar();
};
和
namespace foo
{
void bar();
}
我看到它的方式没有,因为bar
中的class foo
无法访问this
,bar
中的foo
也没有{{1}} }}
当然,这纯粹是理论上的。
答案 0 :(得分:7)
公共静态类成员函数和名称空间中声明的全局函数之间有什么区别?
foo
的对象并调用obj.bar()
,而对于名称空间则无法实现命名空间的实例using
导入命名空间,使bar()
成为有效的通话foo
。例如,在template<typename T> fun() { T::bar(); }
答案 1 :(得分:7)
在命名空间范围内定义的函数可以通过argument dependent lookup找到:
namespace foo
{
class bar;
void baz (bar);
}
foo::bar x;
baz (x); // Ok, baz is found by ADL
如果foo是一个类而不是命名空间,那么这不起作用。