Edw*_*ard 5 c++ constants c-preprocessor
例:
#define Var1 35
static const int Var1( 35);
Run Code Online (Sandbox Code Playgroud)
因此,尽管#define替换到处,我用Var1用35在编译时(我假定使得编译时间稍微长一点,如果你有很多人,因为它解析的代码),使用static const int使编译器认为它是一个变量.
这是否意味着在使用static const int它时会增加我的程序的内存印记,因为它必须为所有这些常量使用内存,或者这个开销是否已经被编译器优化了?
我问的原因是因为我想知道是否更好,对于这样的情况,将它们作为static const ints在调试模式下(这样你可以在调试时轻松看到值)但是让它们#define处于发布模式,所以它会使程序变小.
如果是,static那么编译器可以看到它仅在该翻译单元内部使用,而不必想知道它是如何在外部使用的,这是一个优点。如果您不做任何事情使其必须是实际变量(例如创建指向它的指针),那么编译器通常会对其进行优化。
更友好的方法可能是使用枚举
enum { Var1 = 35 };
Run Code Online (Sandbox Code Playgroud)
或在 C++11 中,constexpr
constexpr int Var1 = 35;
Run Code Online (Sandbox Code Playgroud)
这些还有一个优点,即不会弄乱另一个作用域中的同名变量,如果您稍后有的话
void f() {
int Var1;
}
Run Code Online (Sandbox Code Playgroud)
#define 会将其变成int 35;
但所使用的内存差异将非常小,很可能微不足道,除非您处于极其有限的环境中,否则永远不会对性能产生任何可测量的影响。
| 归档时间: |
|
| 查看次数: |
614 次 |
| 最近记录: |