关于C#:static const和const有什么区别?

What is the difference between static const and const?

static constconst有什么区别?例如:

1
2
static const int a=5;
const int i=5;

他们之间有什么区别吗?你什么时候用一个比另一个?


静态决定函数外部的可见性或内部变量的寿命。所以这与警察本身无关。

const意味着初始化后不会更改该值。

函数内部的静态意味着变量将在函数结束之前和之后存在。

函数外部的static表示标记为static的符号的范围仅限于该.c文件,并且在该文件外部看不到。

从技术上讲(如果您想查找它),static是一个存储说明符,const是一个类型限定符。


区别在于连杆。

1
2
3
// At file scope
static const int a=5;  // internal linkage
const int i=5;         // external linkage

如果i对象未在定义它的翻译单元之外使用,则应使用static说明符声明它。

这使编译器能够(潜在地)执行进一步的优化,并通知读者对象不在其翻译单元之外使用。


这取决于这些定义是否在函数内部。函数之外的情况的答案由ouah给出,见上文。函数内部的效果不同,如下面的示例所示:

1
2
3
4
5
6
#include <stdlib.h>

void my_function() {
  const int foo = rand();         // Perfectly OK!
  static const int bar = rand();  // Compile time error.
}

如果您希望一个局部变量是"真正的常量",那么您不仅要定义它"const",还要定义它"static const"。