C ++中的多个名称空间声明
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C ++中的多个名称空间声明相关的知识,希望对你有一定的参考价值。
替换这样的东西是合法的:
namespace foo {
namespace bar {
baz();
}
}
用这样的东西:
namespace foo::bar {
baz();
}
?
答案
您可以将名称空间组合成一个名称并使用新名称(即Foobar)。
namespace Foo { namespace Bar {
void some_func() {
printf("Hello World.");
}
}}
namespace Foobar = Foo::Bar;
int main()
{
Foobar::some_func();
}
另一答案
不,这不对。而不是一堆缩进的嵌套命名空间,将它们放在同一行上当然是有效的:
namespace Foo { namespace Bar { namespace YetAnother {
// do something fancy
} } } // end Foo::Bar::YetAnother namespace
更新:
You can now nest namespaces more cleanly in C++17:
namespace Foo::Bar::YetAnother {
// do something even fancier!
}
另一答案
合格的名称,如C ++中的something::someting_else
,只能用于引用之前已声明过的实体。您不能使用此类名称来介绍以前未知的内容。即使之前已经声明了嵌套命名空间,扩展该命名空间也被视为“引入新内容”,因此不允许使用限定名称。
您可以使用此类名称来定义先前在命名空间中声明的函数
namespace foo {
namespace bar {
int baz();
}
}
// Define
int foo::bar::baz() {
/* ... */
}
但没有声明扩展现有命名空间的新命名空间。
另一答案
对于任何想知道的人,从C ++ 17开始支持namespace foo::bar
形式。参考文献:
- http://en.cppreference.com/w/cpp/language/namespace
- http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4230.html
另一答案
没有;这是一个语法错误。
另一答案
你试过吗? Visual C ++给我以下错误:
1> C:\ ... \ foo.cpp(31):错误C2061:语法错误:标识符'bar' 1> C:\ ... \ fooo.cpp(31):错误C2143:语法错误:缺少';'在'{'之前
另一答案
根据$ 2.10中的语法,标识符不能包含令牌":"
。所以foo::bar
的名字是不正确的。
以上是关于C ++中的多个名称空间声明的主要内容,如果未能解决你的问题,请参考以下文章