在C++中,在单独的文件中使用名称空间的正确方法是什么



在其他文件中使用名称空间的正确方法是什么,这样我就可以将它们与#include<>一起使用

测试.h

#ifndef TEST_H_INCLUDED
#define TEST_H_INCLUDED
namespace numbers{
const int foo = 8;
}
#endif //TEST_H_INCLUDED

然而,我也看到了这个

测试.h

#ifndef TEST_H_INCLUDED
#define TEST_H_INCLUDED
namespace numbers{
extern const int foo;
}
#endif //TEST_H_INCLUDED

测试.cpp

#include "test.h"
namespace numbers{
const int foo = 8;
}

然后我想在哪里使用它,

#include "test.h"
std::cout << numbers::foo;

两者都起作用,哪种方式正确,为什么?

使用第一种方法,您将获得多个定义(假设您有多个include(,这是允许的,因为全局常量不受一个定义规则的约束。

第二种方法只有一个定义,在test.cpp中。

第一种方法更有可能导致编译器优化,因为编译器总是知道常量的值,但如果对象的构造成本很高,则最好使用第二种方法,因为不存在必须构造多个对象的风险。尽管即使在这种情况下,链接器也可以很好地消除除一个对象之外的所有对象。

最新更新