const和static const的区别

请分全局、文件、函数和类四种情况分别详细介绍一下,谢谢了。

const和static const的区别:

一、全局的区别

const规定变量在全局中是只读的变量,并且它的值无法被修改。

static const规定变量在当前的模块中是只读的变量,无法再全局中被其他模块读取。

二、文件的区别

const定义的指针,不赋初值编译时不报错,在初始化时应说明指针的指向。

static const不能在定义对象时对变量初始化,就是不能用构造函数来初始化。

三、函数的区别

const只能通过构造函数初始化列表进行,并且必须有构造函数。

static const是静态的,属于类的静态成员函数。

四、类的区别

const数据成员只在某个对象生存期内是常量,而对于整个类而言却是可变的。因为类可以创建多个对象,不同的对象其const数据成员的值可以不同,所以不能在类声明中初始化const数据成员。

static const初始化在类体外进行,初始化时不加该成员的访问权限控制符private,public等,并且初始化时使用作用域运算符来标明它所属类,因此,静态数据成员是类的成员,而不是对象的成员。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-09-04
对于C/C++语言来讲,
const就是只读的意思,只在声明中使用;
static一般有2个作用,规定作用域和存储方式.对于局部变量,static规定其为静态存储方式,每次调用的初始值为上一次调用的值,调用结束后存储空间不释放;
对于全局变量,如果以文件划分作用域的话,此变量只在当前文件可见;对于static函数也是在当前模块内函数可见.
static const 应该就是上面两者的合集.
下面分别说明:
全局:
const,只读的全局变量,其值不可修改.
static,规定此全局变量只在当前模块(文件)中可见.
static const,既是只读的,又是只在当前模块中可见的.
文件:
文件指针可当作一个变量来看,与上面所说类似.
函数:
const,返回只读变量的函数.
static,规定此函数只在当前模块可见.
类:
const,一般不修饰类,(在VC6.0中试了一下,修饰类没啥作用)
static,C++中似乎没有静态类这个说法,一般还是拿类当特殊的变量来看.C#中有静态类的详细说明,且用法与普通类大不相同.本回答被提问者采纳
第2个回答  2011-07-18
const 是常量, 也就是只读的, 是一个"右值"
比如
const int iRet = 2 ;
iRet = 3 ; // 这句是错的, const类型只能在初始化的时候赋值, 之后不能改变
static称为静态变量, static有两种, 一种是在类的成员变量中, 一种是局部变量或全局变量.
在类中的, 用代码解释
class exp {
static int i1 ;
int i2 ;
} ;
int main() {
exp e1 ;
exp e2 ;
e1.i1 = 5 ;
e1.i2 = 10 ;
e2.i1 = 15 ;
e2.i2 = 20 ;
cout << e1.i1 << endl ; //这是输出的会是15
cout << e1.i2 << endl ; // 这里输出是10
return 0 ;
}
类中的static变量的意思是, 在这个类的所有实例中的值都是一样的, 它与const不同, const 只是只读, 在其他方面与不带const的变量没什么区别
还有一种是const全局变量或局部变量, 这两种是相同的, 局部变量的作用域会和全局变量相同
上代码:
static int i1 ;
int add(int a, int b) {
static int c = a + b ;
return c ;
}
void main() {
add(5, 8);
int result = c ; //这里 result会是13 无论static变量 是全局的还是局部的, 作用域都和全局变量相同
cout<<result<<endl;
}

还有几点static的特点,(适用于static全局变量或局部变量)
1.static变量在全局数据区分配内存, 也就是 在生成的可执行文件中占一定空间, 这点与全局变量相同
2.static变量只在它所在的源文件中可用. 如果一个项目有很多 .c或者.cpp文件, static变量可以出现在每一个文件中, 而他们却是不同的, static可以解决许多文件中变量 名字相同的问题.
第3个回答  2008-09-17
static为静态修饰符,可以放在对象前面(函数也是一种对象)如:
class Example{
public static void show(){
Console.WriteLine("这是一个静态方法");
}
}
可直接Example.show();去调用这个方法而不用实例化
当然也可以定义静态的属性:
public static string str="hello";
但如果这样Example.str="helloworld";就出现问题了
也就是客户端可以在任何地方去改变str的值。这样的话极容易产生错误,因为str的值是依靠Example类的,随时可以改变。比如再声明一个类:
Class Class1
{
Example.str="helloworld";
public void show()
{
Console.WriteLine(Example.str);//此时Example.str会输出helloworld
}
}
class Example{
public static string str="hello";
}
}
要防止str值发生改变,就需要用到const修饰符
public const string str="hello";//str被称为常量
这是如果再对Example.str赋值,则编译器将产生错误
用常量来保存公共数据是最为合适的。
第4个回答  2008-09-18
const和static const的区别: 多了一个static
static作用:1限制范围(函数,变量只能在本文件中使用)
2设定变量存储区域(静态存储区域)
相似回答