const和static const的区别

请分全局、文件、函数和类四种情况分别详细介绍一下,谢谢了。... 请分全局、文件、函数和类四种情况分别详细介绍一下,谢谢了。 展开
 我来答
写在枫叶上的故事
推荐于2019-10-23 · TA获得超过2.6万个赞
知道答主
回答量:164
采纳率:0%
帮助的人:2.6万
展开全部

const和static const的区别:

一、全局的区别

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

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

二、文件的区别

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

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

三、函数的区别

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

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

四、类的区别

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

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

Storm代理
2023-07-25 广告
StormProxies是一家可靠的代理服务提供商,提供原生IP(住宅原生IP)和高匿名代理服务。以下是关于StormProxies的原生IP服务的一些信息:1. 住宅原生IP:StormProxies提供的住宅原生IP是指从真实的家庭或企... 点击进入详情页
本回答由Storm代理提供
百度网友d24e7bc
推荐于2017-09-04 · TA获得超过533个赞
知道答主
回答量:36
采纳率:0%
帮助的人:19.1万
展开全部
对于C/C++语言来讲,
const就是只读的意思,只在声明中使用;
static一般有2个作用,规定作用域和存储方式.对于局部变量,static规定其为静态存储方式,每次调用的初始值为上一次调用的值,调用结束后存储空间不释放;
对于全局变量,如果以文件划分作用域的话,此变量只在当前文件可见;对于static函数也是在当前模块内函数可见.
static const 应该就是上面两者的合集.
下面分别说明:
全局:
const,只读的全局变量,其值不可修改.
static,规定此全局变量只在当前模块(文件)中可见.
static const,既是只读的,又是只在当前模块中可见的.
文件:
文件指针可当作一个变量来看,与上面所说类似.
函数:
const,返回只读变量的函数.
static,规定此函数只在当前模块可见.
类:
const,一般不修饰类,(在VC6.0中试了一下,修饰类没啥作用)
static,C++中似乎没有静态类这个说法,一般还是拿类当特殊的变量来看.C#中有静态类的详细说明,且用法与普通类大不相同.
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ice_b0und
2011-07-18 · TA获得超过139个赞
知道答主
回答量:94
采纳率:0%
帮助的人:55.2万
展开全部
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可以解决许多文件中变量 名字相同的问题.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
I_cigarette
2008-09-17 · TA获得超过837个赞
知道答主
回答量:251
采纳率:0%
帮助的人:0
展开全部
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赋值,则编译器将产生错误
用常量来保存公共数据是最为合适的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yiyuandao
2008-09-18
知道答主
回答量:8
采纳率:0%
帮助的人:0
展开全部
const和static const的区别: 多了一个static
static作用:1限制范围(函数,变量只能在本文件中使用)
2设定变量存储区域(静态存储区域)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式