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是常量成员函数
但构造函数和析构函数对这个规则例外,它们从不定义为常量成员,但可被常量对象调用(被自动调用)。它们也能给常量的数据成员赋值,除非数据成员本身是常量。
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是常量成员函数
但构造函数和析构函数对这个规则例外,它们从不定义为常量成员,但可被常量对象调用(被自动调用)。它们也能给常量的数据成员赋值,除非数据成员本身是常量。
相关文章推荐
- C++ 中的const用法整理
- C++关键字const用法详解
- c++中const的用法详解
- C++中const的用法详解
- C++的const用法
- C++中const用法浅析
- C++中const 的用法
- C++中const用法总结
- C/C++中const用法小结
- c/c++中const用法总结
- c++中const用法的理解
- c++中const的用法详解
- C++ const用法总结
- [转]C/C++中关键字static,const,inline,define,typedef的用法及其意义
- C++中const的用法详解
- 重新拾起c++中const得用法;
- 高质量C++(const用法)
- 关于C++中的const关键字的用法
- C++中const的正确用法之一
- C++中const用法浅析