const:
用途:用于声明常量。一旦为const
对象赋值后,就不能再修改它。
作用域:可以是全局的、类的、文件内静态的或函数内的(但局部常量通常在函数内被初始化为常量表达式)。
储存期:取决于其作用域和定义位置。
static:
用途:在函数内部:用于声明一个只在该函数内部初始化一次的局部变量(即,它只在第一次进入该函数时初始化,并在程序的生命周期内保持其值)。
在文件作用域(全局或命名空间):用于声明一个只在该文件或命名空间中可见的变量或函数
在类内部:用于声明一个类的静态成员变量或静态成员函数。静态成员变量在所有对象之间共享一个存储位置,而静态成员函数则可以直接通过类名调用,无需创建类的对象。
作用域:取决于其定义位置。在文件作用域中,它是文件私有的;在类作用域中,它是类的成员
储存期:静态变量具有静态存储期,这意味着它们在程序的整个生命周期内都存在。
主要区别:
可变性:const
表示不可变性,即一旦初始化后就不能再修改;而static
与可变性无关,它控制变量的存储期和可见性。
存储期:虽然两者都与存储期有关,但static
关键字直接指定了静态存储期,而const
本身并不指定存储期(除非与static
或其他存储类说明符一起使用)。
可见性:static
在文件作用域中用于限制变量的可见性;而const
本身不控制可见性,它只控制变量的可修改性。
用途:const
主要用于创建常量;而static
主要用于控制变量的存储期和可见性,以及类成员函数的调用方式。