1和2有什么区别?
1:
namespace Foo {
int bar;
}
2:
class Foo {
public:
static int bar;
}
如果bar
是函数,那么不同的是static class member
可以访问类private
成员。
但有时我们只需要存储一个constant
例子。然后我们有一个选择。
这两者有什么区别吗?
选择一个而不是另一个的原因是什么。
我已经搜索过这个,我很惊讶网上还没有答案。
1和2有什么区别?
1:
namespace Foo {
int bar;
}
2:
class Foo {
public:
static int bar;
}
如果bar
是函数,那么不同的是static class member
可以访问类private
成员。
但有时我们只需要存储一个constant
例子。然后我们有一个选择。
这两者有什么区别吗?
选择一个而不是另一个的原因是什么。
我已经搜索过这个,我很惊讶网上还没有答案。
命名空间声明为整个程序定义了一个唯一的对象。如果你把它放在一个头文件中,包括来自两个不同源文件的头文件会产生一个多定义链接器错误。
类静态声明要求链接器在所有源文件中共享一个对象。
类和命名空间是完全不同的东西。一个类描述了如何形成一个对象。类模板也可用于形成元程序。但是一个类不应该仅仅用于在一个范围内对事物进行分组,这样该类就永远不会被实例化。这就是命名空间的工作。
如果要在多个源之间共享对象,请执行以下操作:
// Foo.h
namespace Foo {
extern int bar; // declaration
}
// Foo.cpp
namespace Foo {
int bar = 2; // definition
}
如果对象是一个常量,那么只要您不需要bar
在内存中有地址,就不需要定义。
由于这里有很好的答案,我想添加一些重要的区别:
如果您需要声明具有特定类型和唯一名称的全局变量,您可以在模板类中使用静态变量。这对于命名空间是不可能的(至少现在不是)。
template <class T>
struct my_variable_name {
static T value;
};
my_variable_name<int>::value=7;
my_variable_name<float>::value=5.0;
巨大差距。除了字面上的区别外,它们在以下方面有所不同: