hello!大家好!
初次写博客,希望可以得到大家多多支持。
或者有什么意见和建议。
希望可以得到大家的评论。
今天我想谈谈const在c和c++中的用法。
首先,可能大家在刚一接触到const的时候,大家一致性的以为它仅仅就是一个来定义常量的关键字。
eg:const int x=5;
x呢,它是一个整形的变量,当你在它的前边加上const的时候,也就是将它变为一个常量。
而我们知道,有一种比较常见的定义常量的方法:
#define x 5;
这句的意思就是说:
定义一个常量x,并且给它赋值5.通俗点来说就是以后所写的代码里边只要是遇到x,
那么编译器就会自动用5来代替。
这个大家应该没有什么异议吧!
但是呢,这也就意味着x的值是不能被修改的。
比如下边这段代码:
当我们编译它的时候提示const不能被修改。
但是,它就真的不能被修改吗?
看下面这段代码:(注意:这是.c文件)
我们引入了一个指针来改变了它的值。
下面再看一段代码:(注意:这是.cpp文件)
可能大家都发现了一个问题:
同样的代码,同样的编译器,只是改变了文件的后缀名。却打印出了不一样的值。
那么,这到底是为什么呢?
简单点来讲:在c程序中const的含义就是,其所定义的名称,任然为一个变量名,但只是具有了常属性。
在c++程序中其表示的就是一个常量。是不允许被修改的。
但是,从c++程序来看,确实是修改了x的值。但是却为什么打印出了修改之前的值呢?
这就和编译环境有关了。不同的语言编译器对它的优化是不一样的。
直观来说:两者都修改了x在内存中的值。只是c++程序优化级别在这方面更加高于c程序。在编译器识别的const的时候就把x的值直接存储到了寄存器。以后的程序中要是用到x,系统就会直接从寄存器里边直接去取,是不会访问内存的。(但事实上,内存中已被修改)
哈哈。怎么样。这下弄清楚了吧。