提问人:user2052436 提问时间:10/12/2023 最后编辑:user2052436 更新时间:10/12/2023 访问量:54
嵌套或非嵌套匿名命名空间,用于隐藏实现详细信息
Nested or non-nested anonymous namespace to hide implementation details
问:
嵌套匿名命名空间与将其置于翻译单元的顶层有什么区别?
namespace Named {
namespace {
void impl () {...}
}
void fun ()
{
impl();
}
}
或
namespace {
void impl () {...}
}
namespace Named {
void fun ()
{
impl();
}
}
答:
0赞
Yksisarvinen
10/12/2023
#1
与所有命名空间相同 - 查找规则。在第一个示例中,如果已经有自己的,那将是一个错误。在第二种情况下,如果存在,它将被默默接管.在线查看Named
void impl(){}
Named::impl
anonymous-namespace::impl
评论
0赞
user2052436
10/12/2023
我想我的问题是:在隐藏实现细节时,哪种方法更可取(只是风格方面或其他原因)?
0赞
Yksisarvinen
10/12/2023
@user2052436 无论如何,第一个版本对我来说似乎更好 - 如果定义重复,您会收到错误,它允许您在没有显式命名空间的情况下引用 in 中的使用名称,并且您可以为匿名命名空间中的类型添加运算符重载。Named
impl
Named
评论
impl();
::Named::impl();
::impl();
impl
impl