请先阅读第二次编辑。
我正在寻找能够详细解释c / c ++内存管理模型的书籍或网站。我想要了解的其中一件事是:
namespace A {
SomeClass A;
}
VS
namespace A {
static SomeClass A;
}
VS
SomeClass A;
VS
static SomeClass A;
非常感谢。
编辑: 对不起,我把这些概念混合在一起,并提出了错误的问题。
答案 0 :(得分:1)
命名空间允许在名称下对类,对象和函数等实体进行分组。这样,全局范围可以划分为“子范围”,每个范围都有自己的名称。
使用关键字using
将名称空间中的名称引入当前声明性区域。
例如: 不使用命名空间你会写: #include
int main () {
std::cout << "Hello world!\n";
return 0;
}
但是你也可以写: #包括 使用namespace std;
int main () {
cout << "Hello world!\n";
return 0;
}
这允许您不要在每个
之前附加napespace标识符在C ++中,静态类与其他OOP语言不同。您可以拥有静态数据成员方法。
相反,您可以创建:
1.类
中的静态方法class SomeClass
{
public: static void myMethod(int x..)
{
}
}
2.在命名空间中创建一个自由函数
namespace A
{
void myMethod(int x..)
{
}
}
当您不需要物体时,Latter更适合。没有班级没有对象......
在两种情况下,在命名空间中包含一个类允许您使用通用名称对实体进行分组。
答案 1 :(得分:0)
首先,命名空间只有在编译之前才会知道,之后它们就不存在了。也就是说,至少据我所知,你的上半场与最后一节的下半场没有什么不同。如果我错了请纠正我。
然后,如果static SomeClass A
和SomeClass A
都在全局范围(文件级别),那么它们也是相同的。
接下来,如果两个声明都在class
,struct
或函数内,那么static
版本也将被放入可执行文件的数据段中,而非static
变体将是一个普通的堆栈变量。
如果我错了,请再次纠正我,但据我所知,这就是它。