C++ 没有地址的静态变量是否需要存在于优化的构建可执行文件中?

C++ 没有地址的静态变量是否需要存在于优化的构建可执行文件中?,c++,static,C++,Static,这个问题是在我告诉人们不要使用预处理器时提出的, 例如: 否: 是的: 然后提出了一个论点,即变量使用内存,而define就好像您在使用它的地方直接编写了5一样 所以我的问题是(假设从未使用过大小地址,那么除了用于定义数组大小或循环迭代计数的位置之外,程序的其他部分看不到它) 静态常量大小\u t size是否必须存在于结果程序的内存中,或者是否允许优化编译器/链接器将其删除。为什么将其设为静态?非静态常量没有链接问题。这将由编译器定义,但我假设任何合适的编译器都会对其进行优化,并在不使用ODR

这个问题是在我告诉人们不要使用预处理器时提出的, 例如:

否:

是的:

然后提出了一个论点,即变量使用内存,而define就好像您在使用它的地方直接编写了5一样

所以我的问题是(假设从未使用过大小地址,那么除了用于定义数组大小或循环迭代计数的位置之外,程序的其他部分看不到它)
静态常量大小\u t size
是否必须存在于结果程序的内存中,或者是否允许优化编译器/链接器将其删除。

为什么将其设为静态?非静态常量没有链接问题。这将由编译器定义,但我假设任何合适的编译器都会对其进行优化,并在不使用ODR的情况下使用文本值。优化编译器可以执行任何符合“假设规则”的操作。如果常量的地址从未被记录,就无法判断它是否在内存中。它可能会使用内存,也可能不会使用内存,但您不能say@NeilButterworth很少有人知道C++中的const意味着静态。
#define SIZE 5;
static const size_t SIZE = 5;