您现在的位置是:网站首页 > 情感咨询

const在 C 与 C++ 中的区别

本站2019-07-11182人围观
简介 1、C语言中全局const变量会存储到只读数据段,C++中全局const变量声明为extern或者对变量取地址时,编译器会分配内存,变量存储在只读数据段。 两个都受到了只读数据段的保护,

const在 C 与 C++ 中的区别

1、C语言中全局const变量会存储到只读数据段,C++中全局const变量声明为extern或者对变量取地址时,编译器会分配内存,变量存储在只读数据段。

两个都受到了只读数据段的保护,不可修改。

constintconstA=100;intmain(){int*p=(int*)(constA);*p=200;return0;}运行结果:以上代码在C/C++中均编译通过,但是在运行期修改constA的值时,发生写入错误,原因是修改只读数据段的数据。 2、C语言中局部const存储在堆栈区,只是不能通过变量直接修改const只读变量的值,但是可以跳过编译器的检查,通过指针间接修改const的值。 intmain(){constintconstA=100;int*p=(int*)(constA);printf("constA=%d",constA);*p=200;printf("*p=%d",*p);return0;}运行结果:3、C++中的局部const变量:对于基础数据类型,即int、double等,编译器会将它放到符号表中,不分配内存,当对其取地址时,会分配内存。 intmain(){constintconstA=100;int*p=(int*)(constA);*p=200;cout"constA="constAendl;cout"*p="*pendl;return0;}运行结果:constA在符号表中,当对constA取地址,这个时候为constA分配了新的空间,*p操作的是分配的空间,而constA是从符号表中获取的值。 如果用一个变量初始化一个const基础数据类型变量,那么也会给这个const变量分配内存空间,可以通过指针修改其值。

intmain(){intb=100;constintconstA=b;int*p=(int*)(constA);*p=200;cout"constA="constAendl;cout"*p="*pendl;return0;}运行结果:自定义数据类型的const变量,例如类对象,也会分配内存,可以通过指针间接修改数据成员的值。 classPerson{public:intage;stringname;};intmain(){constPersonperson;//未初始化age//=20;//无法修改Person*pPerson=(Person*)person;pPerson-age=100;//指针间接修改cout"pPerson-age:"pPerson-ageendl;return0;}运行结果:const由C++采用,并加进标准C中。 在C语言中const默认为外部连接,C++中const默认为内部连接。

当C语言中两个文件中有同名const变量时,编译器会报重复定义,在C++中就不会。

若想让C++中的const成为外部连接,必须用extern显式声明。