是什么static const
和const
之间的区别? 例如:
static const int a=5;
const int i=5;
它们之间有什么区别吗? 你什么时候使用一个?
是什么static const
和const
之间的区别? 例如:
static const int a=5;
const int i=5;
它们之间有什么区别吗? 你什么时候使用一个?
区别在于联动。
// At file scope
static const int a=5; // internal linkage
const int i=5; // external linkage
如果i
对象没有定义它的转换单元之外使用,你应该用static
符声明。
这使得编译器能够(可能)执行进一步优化并通知读者该对象不在其翻译单元之外使用。
+1如果你还可以添加它的含义,如果这些声明是在一个函数内,那将会很棒。 – Praetorian
你确定'const int i = 5;'有外部连接吗?在C++中它不... –
@KerrekSB在文件范围,是的。 *(C99,6.2.2p5)“如果对象的标识符的声明具有文件范围并且没有存储类说明符,则其链接是外部的。”* – ouah
static决定函数外的可见性或内部的变量生命期。所以它与const本身无关。
const意味着你没有改变初始化后的值。
函数内部的静态意味着变量将在函数结束之前和之后存在。
函数外部的静态意味着标记为静态的符号范围仅限于该.c文件,并且无法在其外部看到。
技术上(如果你想查看这个),static是一个存储说明符,const是一个类型限定符。
简单的解释谢谢! – Alec
这取决于这些定义是否在函数内部。 以外的答案函数由上面的ouah给出。 内部函数效果是不同的,通过下面的例子说明:
#include <stdlib.h>
void my_function() {
const int foo = rand(); // Perfectly OK!
static const int bar = rand(); // Compile time error.
}
如果你想有一个局部变量是“真常,”你必须定义它不仅仅是“常量”,而是“静常量”。
它为我完美编译......但我知道在这种情况下有一个静态常量变量是愚蠢的。 – DrumM
@EtiennedeMartel“静态是默认行为”当然不是。无论给你什么想法? –
相关:http://stackoverflow.com/questions/6381088/const-vs-static-const – halex
投票重新开放。 “重复”是问一个完全不同的问题,具体到内存使用情况。这个问题提出了一个关于差异的更一般的问题。 – rmaddy