在命名空间块中定义类方法与使用::定义它们之间的区别是什么?

时间:2014-05-29 01:23:17

标签: c++ class namespaces

例如:

// Example.h
namespace MyExample
{
     class Example
     {
         void Print() const;
     };
}

这样做的区别是什么:

// Example.cpp
namespace MyExample
{
    Example::Print() const
    {
        ...
    }
}

这样做:

// Example.cpp
MyExample::Example::Print() const
{
    ...
}

两者的优点/缺点是什么?

2 个答案:

答案 0 :(得分:2)

编译器没有区别。

但是,您会注意到某些IDE在生成代码时会更喜欢第二种解决方案(例如Eclipse CDT):

  • 在阅读定义时,会立即清楚函数所在的命名空间,无需向上滚动文件
  • 避免与嵌套命名空间混淆
  • 它限制了编辑器中代码的嵌套(在解决方案1中,每个命名空间块为其中定义的代码添加了一个全新的缩进)
  • 如果你在源文件中grep命名空间名称,你将更容易找到在其中声明的函数

答案 1 :(得分:1)

两者在技术上都是一样的。但是,如果要在文件中定义该命名空间的许多功能,而不是使用命名空间名称限定每个功能,那么如果您不特别喜欢破解指关节,则可以执行前者以避免额外输入。

当然,后一种形式对某些人来说具有更好的可读性,而且是主观的。