将常量变量定义为使程序更小吗?

Edw*_*ard 5 c++ constants c-preprocessor

例:

#define Var1 35
static const int Var1( 35);
Run Code Online (Sandbox Code Playgroud)

因此,尽管#define替换到处,我用Var135在编译时(我假定使得编译时间稍微长一点,如果你有很多人,因为它解析的代码),使用static const int使编译器认为它是一个变量.

这是否意味着在使用static const int它时会增加我的程序的内存印记,因为它必须为所有这些常量使用内存,或者这个开销是否已经被编译器优化了?

我问的原因是因为我想知道是否更好,对于这样的情况,将它们作为static const ints在调试模式下(这样你可以在调试时轻松看到值)但是让它们#define处于发布模式,所以它会使程序变小.

Rya*_*ing 3

如果是,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;

但所使用的内存差异将非常小,很可能微不足道,除非您处于极其有限的环境中,否则永远不会对性能产生任何可测量的影响。