我正在学习C ++。可以放在命名空间中的完整法律实体是什么?
此处的法律实体是指名称空间的有效成员
哦,这是一个真正的问题。我来自.net,我有.net心态。
答案 0 :(得分:2)
任何代码都可以放在命名空间内。
但是main()
函数必须在全局命名空间。 不能放在用户定义的命名空间内。
namespace userns
{
int main()
{
return 0;
}
}
此程序不会编译链接:http://www.ideone.com/k6SPc
因为userns::main()
不会被视为该计划的切入点;它变得像任何其他用户功能一样,而不是标准main()
。要成功编译它,您需要在全局命名空间添加main()
:
namespace userns
{
int main()
{
return 0;
}
}
int main()
{
return 0;
}
现在将编译链接:http://www.ideone.com/76Ynu
答案 1 :(得分:1)
任何东西都可以放在命名空间中(当然这对于C++
是合法的。)
实际上,如果没有指定,一切都在某个命名空间中 - 全局命名空间。
答案 2 :(得分:0)
除了少数“实体”之外,所有内容都可以放在namespace
中,无法编译。
(1)全球超载operator new
和operator delete
namespace N
{
void* operator new (size_t size) // error
{ ... }
}
(2)在namespace
的外部范围内声明的结构的定义;例如,您在全局范围内声明了class A
,那么您无法在namespace N
内定义其方法。同样,如果您在namespace N
中声明了方法,则无法将其定义放在namespace N::Nested
内(即Nested
是N
内的命名空间。)
//file
struct A {
void foo ();
static int i;
};
namespace N
{
int A::i = 0; // error
void A::foo() // error
{}
}
我记得至少从我的经验中得出这两个限制。不知道规格。