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