C ++名称空间围绕头部声明和源定义

时间:2012-10-05 10:17:05

标签: c++ namespaces coding-style declaration

我正在创建一个静态库,其中定义的所有内容都在一个命名空间中。但我不确定是否应该将方法定义为类,或者将它们包装在命名空间中。我问的是:

这是否有效:

MyThings.h

namespace MyThings {
    void DoStuff();
    void DoOtherStuff();
}

MyThings.cpp

namespace MyThings {
    void DoStuff() {
        // Do this.
    }

    void DoOtherStuff() {
        // Do that.
    }
}

或者,我应该像定义方法那样定义它吗?:

MyThings.cpp

void MyThings::DoStuff() {
    // Do this.
}

void MyThings::DoOtherStuff() {
    // Do that.
}

我不想使用using namespace MyThings;,如果它有效,我宁愿使用我的第一个示例,我觉得它使代码更具可读性,而不必在每个方法标识符之前使用MyThings::

1 个答案:

答案 0 :(得分:9)

两者都有效,所以你可以根据口味选择你的风格。

使用以下方法定义函数有一个广告优势:

void MyThings::DoStuff() {
    // Do this.
}

为了做到这一点,必须已经声明了该函数。因此,错误如:

void MyThings::DoStuf() {
    // Do this.
}

void MyThings::DoStuff(int i) {
    // Do this.
}
编译MyThings.cpp时会捕获

。如果你定义

namespace MyThings {
    void DoStuff(int i) {
        // Do this.
    }
}

然后你通常不会得到错误,直到另一个源文件中的某个人试图调用该函数,并且链接器抱怨。显然,如果你的测试是非垃圾,你会以某种方式捕获错误,但更快通常会更好,你可能会从编译器中获得比链接器更好的错误消息。