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

Bra*_*ler 2 c++ coding-style namespaces declaration

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

这是有效的:

MyThings.h

namespace MyThings {
    void DoStuff();
    void DoOtherStuff();
}
Run Code Online (Sandbox Code Playgroud)

MyThings.cpp

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

    void DoOtherStuff() {
        // Do that.
    }
}
Run Code Online (Sandbox Code Playgroud)

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

MyThings.cpp

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

void MyThings::DoOtherStuff() {
    // Do that.
}
Run Code Online (Sandbox Code Playgroud)

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

Ste*_*sop 9

两者都有效,所以你可以根据口味挑选自己的风格.

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

void MyThings::DoStuff() {
    // Do this.
}
Run Code Online (Sandbox Code Playgroud)

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

void MyThings::DoStuf() {
    // Do this.
}
Run Code Online (Sandbox Code Playgroud)

要么

void MyThings::DoStuff(int i) {
    // Do this.
}
Run Code Online (Sandbox Code Playgroud)

在编译时被捕获MyThings.cpp.如果你定义

namespace MyThings {
    void DoStuff(int i) {
        // Do this.
    }
}
Run Code Online (Sandbox Code Playgroud)

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