入门教程:C++中的const限定修饰符

简介:

const修饰符可以把对象转变成常数对象,什么意思呢?

  意思就是说利用const进行修饰的变量的值在程序的任意位置将不能再被修改,就如同常数一样使用!

  使用方法是:

const int a=1;//这里定义了一个int类型的const常数变量a;

  但就于指针来说const仍然是起作用的,以下有两点要十分注意,因为下面的两个问题很容易混淆! 

我们来看一个如下的例子:

 

None.gif #include  < iostream >   
None.gif  using    namespace  std;  
None.gif  
None.gif  void  main(  void )  
ExpandedBlockStart.gif  {  
InBlock.gif const   int  a = 10 ;  
InBlock.gif int  b = 20 ;  
InBlock.gif  
InBlock.gif const   int   * pi;  
InBlock.gifpi =& a;  
InBlock.gifcout  <<* pi  <<   " | "   <<  a  << endl;  
InBlock.gifpi =& b;  
InBlock.gifcout  <<* pi  <<   " | "   << b  << endl;  
InBlock.gifcin. get ();  
ExpandedBlockEnd.gif}

 

  上面的代码中最重要的一句是 const int *pi 
这句从右向座读作:pi是一个指向int类型的,被定义成const的对象的指针; 
这样的一种声明方式的作用是可以修改pi这个指针所指向的内存地址不能修改指向对象的值

如果你在代码后加上*pi=10;这样的赋值操作是不被允许编译的!

  好,看了上面的两个例子你对const有了一个基本的认识了,那么我们接下来看一个很容易混淆的用法! 

请看如下的代码:

 

None.gif #include  < iostream >   
None.gif  using    namespace  std;  
None.gif  
None.gif  void  main(  void )  
ExpandedBlockStart.gif  {  
InBlock.gif int  a = 10 ;  
InBlock.gif  
InBlock.gif const   int   * const  pi =& a;  
InBlock.gif  
InBlock.gifcout  <<* pi  <<   " | "   << a  << endl;  
InBlock.gifcin. get ();  
ExpandedBlockEnd.gif}

 

  上面的代码中最重要的一句是 const int *const pi 
这句从右向座读作:pi是一个指向int类型对象的const指针; 

这样的一种声明方式的作用是你不可以修改pi所指向对象的内存地址不能利用指针的解引用方式修改对象的值,也就是用*pi=10这样的方式

所以你如果在最后加上*pi=20,想试图通过这样的方式修改对象a的值是不被允许编译的!

结合上面的两点所说,把代码修改成如下形式后就可以必然在程序的任意的地方修改对象a的值或者是指针pi的地址了,下面的这种写法常被用语涵数的形式参数,这样可以保证对象不会在涵数内被改变值!

 

None.gif #include  < iostream >   
None.gif  using    namespace  std;  
None.gif  
None.gif  void  main(  void )  
ExpandedBlockStart.gif  {  
InBlock.gif const   int  a = 10 ; // 这句和上面不同,请注意!   
InBlock.gif 
  
InBlock.gif const   int   * const  pi =& a;  
InBlock.gif  
InBlock.gifcout  <<* pi  <<   " | "   << a  << endl;  
InBlock.gifcin. get ();  
ExpandedBlockEnd.gif

None.gif
目录
相关文章
|
3月前
|
C++
C++中的const指针与const引用
C++中的const指针与const引用
45 2
|
2月前
|
编译器 C++
【C++】类和对象④(类的默认成员函数:取地址及const取地址重载 )
本文探讨了C++中类的成员函数,特别是取地址及const取地址操作符重载,通常无需重载,但展示了如何自定义以适应特定需求。接着讨论了构造函数的重要性,尤其是使用初始化列表来高效地初始化类的成员,包括对象成员、引用和const成员。初始化列表确保在对象创建时正确赋值,并遵循特定的执行顺序。
|
2月前
|
编译器 C++
【C++】:const成员,取地址及const取地址操作符重载
【C++】:const成员,取地址及const取地址操作符重载
20 0
|
2月前
|
自然语言处理 编译器 C语言
C++语言入门教程
C++语言入门教程
|
3月前
|
编译器 C++
C++中的内联函数与const限定词的使用
C++中的内联函数与const限定词的使用
21 1
|
3月前
|
存储 编译器 程序员
c++修饰符类型
c++修饰符类型
28 1
|
3月前
|
编译器 C语言 C++
从C语言到C++⑤(第二章_类和对象_中篇)(6个默认成员函数+运算符重载+const成员)(下)
从C语言到C++⑤(第二章_类和对象_中篇)(6个默认成员函数+运算符重载+const成员)
16 1
|
3月前
|
编译器 C++
【C++】类与对象(运算符重载、const成员、取地址重载)
【C++】类与对象(运算符重载、const成员、取地址重载)
33 2
|
3月前
|
编译器 C++
【C++】【C++的常变量取地址问题(对比C的不同)】const修饰的常变量&volatile修饰用法详解(代码演示)
【C++】【C++的常变量取地址问题(对比C的不同)】const修饰的常变量&volatile修饰用法详解(代码演示)
|
3月前
|
编译器 C语言 C++
从C语言到C++⑤(第二章_类和对象_中篇)(6个默认成员函数+运算符重载+const成员)(中)
从C语言到C++⑤(第二章_类和对象_中篇)(6个默认成员函数+运算符重载+const成员)
18 0