在C ++中适当使用命名空间

时间:2017-04-17 18:20:15

标签: c++ namespaces

来自Java背景,我习惯于通过引用对象及其方法来创建一个对象并在主类中使用它的方法,例如:

object.objectMethod();

使用具有相同命名方法的不同类不是问题,但现在我在Arduino中做了一个几乎是C ++的项目。在Arduino中使用类的tutorial建议在每个方法之前在.cpp文件中使用类名和双冒号。一些谷歌搜索让我相信这被称为命名空间。在C ++中进一步搜索名称空间产生了各种使用命名空间的选项,但是它们都不像Arduino教程中那样让我感到困惑。

我的问题:命名空间的适当用法是什么,如果在链接教程中使用它是一个好习惯?

1 个答案:

答案 0 :(得分:3)

当你在C ++中看到::时,它并不意味着命名空间。 ::是范围解析运算符。在C ++中有不同的方法来定义范围,命名空间和类是这两种方式中的两种。如果您的原始问题,解释他们的差异,优点和缺点超出范围。

要以更迂回的方式回答您的问题,是的,将函数放在Classes和Namespaces中是Good C ++。否则,您的所有功能都将在全局范围内结束。这使得编程非常混乱,并且使C ++的大部分设计失败。

但是,简单地编写Foo::Baz()并不会将Foo定义为类或命名空间。

要正确使用命名空间,首先要声明它,然后声明成员函数:

namespace MyCoolNamespace {
    void aFunction();
    void anotherFunction(bool b);
}

然后定义如下函数:

void MyCoolNamespace::aFunction()
{
    /* something this function does */
}

然后可以按照教程提到的方式调用它(但请记住,教程的范围是一个类,而不是命名空间!)

MyCoolNamespace::aFunction();

或在使用using关键字的帮助下致电:

using namespace MyCoolNamespace;

aFunction();