用类似这样的方式进行替换,是否合法:
namespace foo {
namespace bar {
baz();
}
}
就像这样:
namespace foo::bar {
baz();
}
?
用类似这样的方式进行替换,是否合法:
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();
}
在 C++17 之前:
不是的。除了一堆缩进的嵌套命名空间外,将它们放在同一行上是完全有效的:
namespace Foo { namespace Bar { namespace YetAnother {
// do something fancy
} } } // end Foo::Bar::YetAnother namespace
C++17更新:
namespace Foo::Bar::YetAnother {
// do something even fancier!
}
如果有人想知道,自C++17起支持namespace foo::bar
格式。 参考资料:
限定名称,例如C++中的something::someting_else
,只能用于引用先前已声明的实体。您不能使用这样的名称来引入先前未知的内容。即使嵌套命名空间已经被声明,扩展该命名空间也被视为“引入新内容”,因此不允许使用限定名称。
您可以使用这些名称来定义先前在命名空间中声明的函数。
namespace foo {
namespace bar {
int baz();
}
}
// Define
int foo::bar::baz() {
/* ... */
}
但不声明新的命名空间或扩展现有命名空间。
1> C:\ ... \ foo.cpp(31):error C2061:语法错误:标识符“bar”
1> C:\ ... \ fooo.cpp(31):error C2143:语法错误:在“{”之前缺少“;”
":"
。因此,名称 foo::bar
是不合法的。foo::bar
有时显然是有效的。 - Dennis Zickefoose