【发布时间】:2014-09-22 08:52:17
【问题描述】:
我看过几篇关于这个问题的帖子,但没有一篇能很好地解释我的担忧,所以我会尝试在这里解释我的理解,如果我错了,请纠正我。
假设我有一个带有以下声明的头文件:
//definitions.h
extern const float fallingTime;
现在,我有两个要使用此声明的源文件。
//source1.cpp
#include "definitions.h"
const float fallingTime = 0.5f;
//use fallingTime
//source2.cpp
#include "definitions.h"
//just use fallingTime (no definition required)
这就是我所做的;但现在,假设以另一种方式继续。
//definitions.h
const float fallingTime = 0.5f; //Note that I don't use extern now
//source1.cpp
#include "definitions.h"
//just use fallingTime (no definition required)
//source2.cpp
#include "definitions.h"
//just use fallingTime (no definition required)
正如我从阅读几个资料中得出的结论,前一种方法的优点是它节省了内存和编译时间,因为内存分配只发生一次(在 source1.cpp 中的定义中),而在后一种方法中,内存分配发生在包含 definitions.h(source1.cpp 和 source2.cpp)的每个源文件中。对吗?
最后,同时使用 extern 和定义常量意味着什么?会等同于前一种方法吗?
//definitions.h
extern const float fallingTime = 0.5f;
【问题讨论】:
-
检查 const 的外部和内部链接。
-
它也依赖于编译器..
-
与任何答案都不相关,但您为什么使用
float?与double相比,唯一的性能提升将来自 RAM 芯片,而不是 CPU 本身(可能使用 80 位浮点)。顺便说一句,0.5 可以不典型地用浮点数精确表示,因为它是二元有理数。 -
它依赖于编译器,但第二种方法很可能会在持续传播期间看到
fallingTime被优化掉。