是什么静态常量和const的区别?(What is the difference between s

2019-07-03 12:00发布

是什么区别static constconst ? 例如:

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

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

Answer 1:

所不同的是联动。

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

如果i对象没有定义它的转换单元之外使用,则应在声明它static符。

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



Answer 2:

静态确定的可视性的功能之外,或一个变量寿命内。 所以它无关,与常量本身。

常量意味着它已经被初始化后,你不改变的值。

在函数内部静态指变量将之前和之后的功能已经结束存在。

一个功能的静态外意味着符号标记静态的范围仅限于.c文件,并且不能在其外部看到。

技术上(如果你想看看这件事),静态是一个存储说明符和const是一个类型限定符。



Answer 3:

这取决于这些定义是否是一个函数或不是内部。 一个函数的情况下,答案是由ouah给出以上。 内部的功能的影响是不同的,通过下面的例子中示出的:

#include <stdlib.h>

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

如果你想有一个局部变量是“真常,”你必须定义它不仅仅是“常量”,而是“静态常量”。



文章来源: What is the difference between static const and const?