static const
和之间有什么区别const
?例如:
static const int a=5;
const int i=5;
它们之间有什么区别吗?您什么时候可以使用另一个?
static const
和之间有什么区别const
?例如:
static const int a=5;
const int i=5;
它们之间有什么区别吗?您什么时候可以使用另一个?
Answers:
区别在于链接。
// At file scope
static const int a=5; // internal linkage
const int i=5; // external linkage
如果i
未在定义翻译单元的外部使用该对象,则应使用说明static
符对其进行声明。
这使编译器能够(潜在地)执行进一步的优化,并告知读者该对象未在其翻译单元之外使用。
const int i = 5;
具有外部链接吗?在C ++中,它不是...
const
与C ++无关const
。
const int i = 5;
如果我是在本地定义和声明的,并且它是静态const int a = 5,则我可以通过使用指针进行修改;或const int i = 5; 全局而言,您无法修改,因为它存储在数据段的RO存储器中。
#include <stdio.h>
//const int a=10; /* can not modify */
int main(void) {
// your code goes here
//static const int const a=10; /* can not modify */
const int a=10;
int *const ptr=&a;
*ptr=18;
printf("The val a is %d",a);
return 0;
}
这取决于这些定义是否在函数内部。函数外的情况的答案由上面的ouah给出。在函数内部,效果不同,如以下示例所示:
#include <stdlib.h>
void my_function() {
const int foo = rand(); // Perfectly OK!
static const int bar = rand(); // Compile time error.
}
如果要使局部变量“真正恒定”,则不仅要定义“ const”,还要定义“ static const”。
foo
每次my_function()
调用都会重新初始化变量,则会导致分配不同的随机值。在bar
变量仅初始化一次的情况下,第一次my_function()
调用会导致在程序的生存期内分配相同的值。因此,静态存储持续时间。
bar
由于rand()
不是编译时常量,因此分配时出现编译错误。