您的位置:首页 > 编程语言 > C语言/C++

<C++>const在不同对象不同位置中的作用

2017-09-23 19:47 447 查看
一、 const与define.
        两者都可以用来定义常量,但是const定义时,定义了常量的类型,所以更精确一些。#define只是简单的文本替换,除了可以定义常量外,还可以用来定义一些简单的函数,有点类似内联函数(Inline)。const和define定义的常量可以放在头文件里面。(小注:可以多次声明,但只能定义一次)
二、 const与指针,引用

1、const与指针。

  先来看看下面的几种定义:

  int p;

  const int * p1=&p;
//p1可变,*p1不可变,此时不能用*p1来修改,但是p1可以转向(可以指向其它内存区域)。

  int * const p2=&p;
//p2不可变,*p2可变,此时允许*p2来修改其值,但是p2不能转向(不可以指向其它区域)。

  const int *const p3=&me;//p3不可变,*p3也不可变,此时既不能用*p3来修改其值,也不能转向

2、指针和引用的区别很简单,就是引用更简洁,更安全。因为引用声明时必须初始化。 引用更接近const指针,一旦与某个变量关联,就将一直效忠于他。
3、const指针可以接受const和非const地址,但是非const指针只能接受非const地址。所以const指针的能力更强一些,所以尽量多用const指针,这是一种习惯。  

三、const与函数

1、const与传递值参数

void function(const int Var); //传递过来的参数在函数内不可以改变.

2、const<
df9a
/span>与返回值 


 const int Fuction1 (int);

此处返回const值,意思指返回的原函数里的变量的初值不能被修改,但是函数按值返回的这个变量被制成副本,能不能被修改就没有了意义,它可以被赋给任何的const或非const类型变量,完全不需要加上这个const关键字.但这只对于内部类型而言(因为内部类型返回的肯定是一个值,而不会返回一个变量,不会作为左值使用),对于用户自定义类型,返回值是常量是非常重要的

3、const与成员函数

 void function(void)const; // ,编译器会对这个函数进行检查,在这个函数中的任何试图改变成员变量和调用非const成员函数的操作都被视为非法

int Stack::functiont(void)  const 



  ++ m_num;
// 编译错误,企图修改数据成员 m_num 

 Pop(); 
// 编译错误,企图调用非const 函数 

 return m_num; 

 }

四、 const与类

1、const数据成员的初始化只能在类的构造函数的初始化表中进行:

class A



const int size = 100;    //错误

};

2、非常量成员函数不能被常量成员对象调用,因为它可能企图修改常量的数据成员:

class Set 

{

  public:

  Set (void){ card = 0; }

  bool Member(const int) const;

  void AddElem(const int);

  //...

};

const Set s;

s.AddElem(10);
 // 非法: AddElem不是常量成员函数

s.Member(10);
//正确

3、成员函数可基于const实现重载。

五、使用const的一些建议

1、要避免最一般的赋值操作错误,如将const变量赋值。 

2、在参数中使用const应该使用引用或指针,而不是一般的对象实例。
3、 const在成员函数中的三种用法(参数、返回值、函数)要很好的使用。 

4、不要轻易的将函数的返回值类型定为const; 

5、除了重载操作符外一般不要将返回值类型定为对某个对象的const引用;

原博客地址:http://blog.csdn.net/lzkit/article/details/7747741
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: