在命名空间块中定义类方法和使用 :: 定义它们有啥区别
Posted
技术标签:
【中文标题】在命名空间块中定义类方法和使用 :: 定义它们有啥区别【英文标题】:What's the difference between defining class methods in a namespace block and defining them using ::在命名空间块中定义类方法和使用 :: 定义它们有什么区别 【发布时间】:2014-05-29 01:23:16 【问题描述】:例如:
// Example.h
namespace MyExample
class Example
void Print() const;
;
这样做有什么区别:
// Example.cpp
namespace MyExample
Example::Print() const
...
然后这样做:
// Example.cpp
MyExample::Example::Print() const
...
两者的优缺点是什么?
【问题讨论】:
没有区别,只是后者更冗长。 【参考方案1】:编译器没有区别。
但是,您会注意到某些 IDE 在生成代码时会更喜欢第二种解决方案(例如 Eclipse CDT):
读取定义时,立即清楚函数在哪个命名空间,无需向上滚动文件 避免与嵌套命名空间混淆 它限制了代码在编辑器中的嵌套(在解决方案 1 中,每个命名空间块为其中定义的代码添加了一个全新的缩进) 如果您在源文件中使用 grep 查找命名空间名称,您将更容易找到其中声明了哪些函数【讨论】:
【参考方案2】:两者在技术上是相同的。但是,当您要在文件中定义该命名空间的许多功能时,如果您不是特别喜欢破解您的指关节,您可以使用前者来避免额外的输入,而不是使用命名空间名称来限定每个功能。
当然,后一种形式对某些人来说可读性更好,而且是主观的。
【讨论】:
以上是关于在命名空间块中定义类方法和使用 :: 定义它们有啥区别的主要内容,如果未能解决你的问题,请参考以下文章