static const和const有什么区别?

Lio*_*ior 71 c static constants

static const和之间有什么区别const?例如:

static const int a=5;
const int i=5;
Run Code Online (Sandbox Code Playgroud)

它们之间有什么区别吗?你什么时候用一个而不是另一个?

Joe*_*Joe 76

static确定函数外部的可见性或内部的变量寿命.因此它与const本身无关.

const意味着您在初始化之后不会更改该值.

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

函数外部的静态意味着标记为static的符号的范围仅限于该.c文件,并且不能在其外部看到.

从技术上讲(如果你想查看),static是一个存储说明符,const是一个类型限定符.


oua*_*uah 51

不同之处在于联系.

// At file scope
static const int a=5;  // internal linkage
const int i=5;         // external linkage
Run Code Online (Sandbox Code Playgroud)

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

这使编译器(可能)执行进一步的优化,并通知读者该对象未在其翻译单元之外使用.

  • @KerrekSB:C和C++不是同一种语言.特别是,C`conc`与C++`const`无关. (9认同)
  • +1如果您还可以添加这些声明在函数内的含义,那就太棒了. (7认同)
  • @KerrekSB在文件范围内,是的.*(C99,6.2.2p5)"如果对象的标识符声明具有文件范围而没有存储类说明符,则其链接是外部的."* (4认同)