c++中const用法整理

来源:互联网 发布:javascript 在线测试 编辑:程序博客网 时间:2024/06/05 02:08

constdefine。两者都可以用来定义常量,但是const定义时,定义了常量的类型,所以更精确一些。#define只是简单的文本替换,除了可以定义常量外,还可以用来定义一些简单的函数,有点类似内联函数(Inline)constdefine定义的常量可以放在头文件里面。(小注:可以多次声明,但只能定义一次)
 1.
定义const对象
const int i=0;//const对象在定义后就不能修改,所以定义时必须初始化
其中     
int i = 1; const int j = i;//ok

int i = 1; const int j = i;//ok
同时,在全局作用于声明的const变量时定义该对象的文件的局部变量。若指定const变量为extern,就可以在整个程序中访问const对象了。extern const int i = 0;


2.
定义const引用
const引用时指向const对象的引用
1>

 int i = 1;const int j = i;//ok
这样的限制有意义:不能直接对i赋值,因此不能通过使用j来修改i
2> 

int i = 1;

const int &j = i;//ok
i = 5;//ok
//j = 6;//error j
是只读类型的
cout << j <<endl;//ok

j是常量类型的,但可以通过修改i来修改j

const int i =1;
int &j = i;//error

j是普通的非const引用,因此可以用来修改j指向的对象的值,通过修改ji的修改会导致修改const对象的值,为阻止这样的修改,需要规定将普通的引用绑定到const对象时不合法的。

3. 用于指针的两种情况:const是一个左结合的类型修饰符.
int const *A;//A可变,*A不可变

int *const A;//A不可变,*A可变


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

这里需要注意的是:尽管函数的形参是const,但是编译器却将function的定义视为其形参被声明为普通的int型:void function(int var);(若同时定义这两个函数,编译器将会报错,重复定义的错误),这种用法是为了支持对C语言的兼容,因为在C语言中,具有const形参或非const形参的函数并无区别。


5.
限定函数返回值型.此时const无意义
const int function(); //
此时const无意义,指函数返回的是常量int
const myclassname function(); //
函数返回自定义类型myclassname.


6
限定函数类型.
1>const
成员函数表示该成员函数只能读取类数据成员,而不能修改类成员数据。
void function()const; //
常成员函数,常成员函数是不能改变成员变量值的函数。
const成员函数应该在函数原型说明和函数定义中都增加const限定,否则编译器会把它看成一个不同的函数)
定义const成员函数时,把const关键字放在函数的参数表和函数体之间。有人可能会问:为什么不将const放在函数声明前呢?因为这样做意味着函数的返回值是常量,意义完全不同。
2>
C++中,const对象只能调用const成员函数,非常量成员函数不能被常量成员对象调用,因为它可能企图修改常量的数据成员:
const Set s;
s.AddElem(10); //
非法:其中AddElem不是常量成员函数
s.Member(10); //
正确:其中Member是常量成员函数
但构造函数和析构函数对这个规则例外,它们从不定义为常量成员,但可被常量对象调用(被自动调用)。它们也能给常量的数据成员赋值,除非数据成员本身是常量。




 


0 0