如何解决在C ++中的单独文件中拥有名称空间的正确方法是什么? test.h
在其他文件中具有名称空间的正确方法是什么,以便我可以将它们与#include<>
test.h
#ifndef TEST_H_INCLUDED
#define TEST_H_INCLUDED
namespace numbers{
const int foo = 8;
}
#endif //TEST_H_INCLUDED
但是,我也看到了
test.h
#ifndef TEST_H_INCLUDED
#define TEST_H_INCLUDED
namespace numbers{
extern const int foo;
}
#endif //TEST_H_INCLUDED
test.cpp
#include "test.h"
namespace numbers{
const int foo = 8;
}
然后是我想使用的任何地方,
#include "test.h"
std::cout << numbers::foo;
这两种方法都能正常工作,这是正确的方法,为什么?
解决方法
使用第一种方法,您将获得多个定义(假设您具有多个include),这是允许的,因为全局常量不受一个定义规则的限制。
第二种方法在test.cpp中只有一个定义。
第一种方法更有可能导致编译器优化,因为编译器始终知道该常量的值,但是如果对象构造成本很高,则使用第二种方法可能会更好,因为不必冒险构造多个对象。尽管即使在这种情况下,链接器也可以消除其中的一个对象。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。