在头文件和源文件中创buildC ++名称空间(cpp)

在命名空间中包装头文件和cpp文件内容还是只包装头文件内容,然后在cpp文件中使用命名空间有什么区别?

差异是指任何types的性能损失或略有不同的语义,可能会导致问题或任何我需要知道的。

例:

// header namespace X { class Foo { public: void TheFunc(); }; } // cpp namespace X { void Foo::TheFunc() { return; } } 

VS

 // header namespace X { class Foo { public: void TheFunc(); }; } // cpp using namespace X; { void Foo::TheFunc() { return; } } 

如果没有什么不同,首选的forms是什么?为什么?

命名空间只是一种破坏函数签名的方法,所以不会发生冲突。 有些人喜欢第一种方式,而其他人则喜欢第二种方式。 这两个版本对编译时性能没有任何影响。 请注意,名称空间只是一个编译时间实体。

使用名称空间的唯一问题是当我们有相同的嵌套名称空间名称(即)X :: X :: Foo。 无论如何这样做会造成更多的混淆,或不使用关键字。

“命名空间X”到“使用命名空间X”的区别在于第一个新的声明将在名称空间下,而第二个声明不会。

在你的例子中没有新的声明 – 所以没有区别,因此不是首选的方式。

没有性能损失,因为结果可能是相同的,但是将Foo放入命名空间会隐含地引入歧义,以防Foo在不同的命名空间中。 确实,你可以得到你的代码fubar。 我build议避免使用这个目的。

你有一个stream浪{using namespace 😉

如果第二个编译的话,应该没有区别。 命名空间是在编译时处理的,不应该影响运行时动作。

但是对于devise问题,其次是可怕的。 即使编译(不确定),也没有任何意义。

在这种情况下,Foo :: TheFunc()不在正确的命名空间中。 使用'void X :: Foo :: TheFunc(){}'在正确的名称空间(X)中实现该函数。

如果你只包装.h内容,你必须使用命名空间…在cpp文件编写,否则你每次工作的有效命名空间。 通常情况下,你同时包装.cpp和.h文件,否则你有冒险使用来自另一个命名空间的对象,这可能会产生很多问题。