C++ const关键字的作用
来源:互联网 发布:淘宝助理上传中断 编辑:程序博客网 时间:2024/05/16 07:44
const是一个C++语言的限定符,它限定一个变量不允许被改变。使用const在一定程度上可以提高程序的安全性和可靠性。另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一些帮助。
1. 修饰常量
用const修饰的变量是不可变的,以下两种定义形式在本质上是一样的:
const int a = 10;int const a = 10;
2. 修饰指针
如果const位于*的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;
如果const位于*的右侧,const就是修饰指针本身,即指针本身是常量。
因此,推荐使用int const* p,而不是使用const int* p(虽然两者意义完全一样),这样更容易理解。
int a = 10;const int* p = &a; // 指针指向的内容不能变int const* p = &a; // 同上int* const p = &a; // 指针本身不能变const int* const p = &a; // 两者都不能变int const* const p = &a; // 同上
3. 修饰引用
以下两种定义形式在本质上是一样的:
int a = 10;const int& b = a;int const& b = a;
4. 修饰函数参数
用const修饰函数参数,传递过来的参数在函数内不可以改变。
void func (const int& n){ n = 10; // 编译错误 }
5. 修饰函数返回值
用const修饰函数返回值的含义和用const修饰普通变量以及指针的含义基本相同。
const int* func() // 返回的指针所指向的内容不能修改{ // return p;}
6. 修饰类成员变量
用const修饰的类成员变量,只能在类的构造函数初始化列表中赋值,不能在类构造函数体内赋值。
class A{public: A(int x) : a(x) // 正确 { //a = x; // 错误 }
private: const int a;};
7. 修饰类成员函数
用const修饰的类成员函数,在该函数体内不能改变该类对象的任何成员变量, 也不能调用类中任何非const成员函数。
class A{public: int& getValue() const { // a = 10; // 错误 return a; }private: int a; // 非const成员变量};
8. 修饰类对象
用const修饰的类对象,该对象内的任何成员变量都不能被修改。
因此不能调用该对象的任何非const成员函数,因为对非const成员函数的调用会有修改成员变量的企图。
class A{ public: void funcA() {} void funcB() const {}};int main{ const A a; a.funcB(); // 可以 a.funcA(); // 错误 const A* b = new A(); b->funcB(); // 可以 b->funcA(); // 错误}
9. 在类内重载成员函数
class A{public: void func() {} void func() const {} // 重载};
10. const与宏定义的区别
const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查,而对后者只进行字符替换,没有类型安全检查,并且在字符替换时可能会产生意料不到的错误。
const常量从汇编的角度来看,只是给出了对应的内存地址,而不是象#define一样给出的是立即数,所以,const定义的常量在程序运行过程中只有一份拷贝,而#define定义的常量在内存中有若干个拷贝。
另外,编译器通常不为const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。
#define PI 3.1415926535const double PI = 3.1415926535;
11. const_cast
const_cast运算符用来修改类型的const或volatile属性。
一、常量指针被转化成非常量的指针,并且仍然指向原来的对象;
二、常量引用被转换成非常量的引用,并且仍然指向原来的对象。
void func(){ const int a = 10; int* p = const_cast<int*> (&a); *p = 20; std::cout<<*p; // 20 std::cout<<a; // 10, 原因见第10部分}
- C 关键字const的作用
- const关键字的作用
- const关键字的作用
- const关键字的作用
- const关键字的作用
- 关键字const的作用
- 关键字const的作用
- const关键字的作用
- const关键字的作用
- C语言const关键字作用
- C语言中Static和Const关键字的的作用
- C语言中Static和Const关键字的的作用
- C语言中Static和Const关键字的的作用
- C语言中Static和Const关键字的的作用
- C语言中Static和Const关键字的的作用
- C语言中Static和Const关键字的的作用
- C/C++中static和const关键字的作用总结
- 关键字 const 的作用(面试)
- Codeforces Round #397(Div. 1 + Div. 2 combined)A. Neverending competitions【水题】
- 为Date类型添加format方法备忘
- 常用类
- 个人rn学习之路
- 函数中参数是否有var的区别
- C++ const关键字的作用
- 【Unity学习笔记】NPC朝向玩家的代码实现
- Android通过Post上传数据和图片到Servlet
- 最接近0的数组子序列
- 序列合并 洛谷1631 堆
- 线程也疯狂----线程同步(1)
- C#中get与set
- 2.14情人节还是情人劫?海南大宗开户有返佣吗
- 00003 不思议迷宫.0001:解密Lua脚本