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

c++中const用法整理

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

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指向的对象的值,通过修改j对i的修改会导致修改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是常量成员函数

但构造函数和析构函数对这个规则例外,它们从不定义为常量成员,但可被常量对象调用(被自动调用)。它们也能给常量的数据成员赋值,除非数据成员本身是常量。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: