const知识点总结
来源:互联网 发布:java获取11位时间轴 编辑:程序博客网 时间:2024/06/06 01:24
一.const修饰常量和defin定义常量的区别
用define定义常量,是没有类型检查的,只是define所定义的宏变量在预处理的时候进行替换,在需要使用的地方进行拷贝一份。const修饰变量有类型检查,需要一定的内存空间,存放在静态区。在程序运行过程中const定义的变量只有一份拷贝,而define宏常量却有多份拷贝,故而运行时宏定义消耗的内存要比const消耗的内存多。
总结如下:
define:
在预处理阶段进行替换
无类型,不进行类型安全检查,可能产生错误
不分配内存,给出的是立即数,有多少次使用就进行多少次替换,在内存中会有多个拷贝,消耗内存大
const:
在编译时确定其值
编译时会进行类型检查
在静态存储区中分配空间,在程序运行过程中内存中只有一个拷贝
二、const修饰变量和指针
1、修饰普通变量,防止变脸被修改
const int a = 100;
2、修饰函数参数, 保护传参时参数不被修改
char *my_strcpy(char dst, const char *src);
以下这个函数会报错
void print(const int &a){ a = 100; printf("%d\n", a);}
下面这个函数不会报错
void print2(int &b){ a = 100; printf("%d\n", a);}
如果使用引用传递参数或按地址传递参数给一个函数,在这个函数里这个参数的值若被修改,则函数外部传进来的变量的值也发生改变,若想保护传进来的变量不被修改,可以使用const保护。
3、const修饰指针
a.修饰的的对象的值可变,指向的地址不可变
const int* val/int const* val;
b.修饰的的对象的值不可变,指向的地址可变
int* const val;
c.两者都不可变
const int* const val
三、const 修饰函数的返回值
1、指针传递
指针传递方式的函数返回值加const 修饰,那么函数返回值(指针)不能被修改。
const char * GetStr(void);const char *str = GetStr(); //正确写法
2、值传递
函数返回值是“值传递”方式,函数会把返回值复制到外部临时的存储单元中,加const 修饰没有任何价值。
下面写法错误
int GetInt(void)const int GetInt(void)//错误
3、引用传递
函数返回值采用“引用传递”的场合并不多,这种方式一般只出现在类的赋值函数
四、const修饰成员变量
和修饰普通变量一样
char *p = NULL;int * a1 = &p; const int * a2 = &p; int * const a3 = &p; int const * const a4 = &p; const int * const a5 = &p;
五、const修饰成员方法
class A{public: A(){} ~A(){} void print(); int GetNumber(void) const; private: int m_num; char *m_data;};int A::GetNumber(void) const { ++ m_num; // 编译错误,企图修改数据成员m_num print(); // 编译错误,企图调用非const 函数 return m_num; }
总结,当const修饰成员函数时,不能去修改非const修饰的成员变量,不能调用非const修饰的成员方法
- const知识点总结
- 关于const知识点总结
- C++ const关键字的使用知识点总结
- C语言之知识点总结——const指针
- 看看看 const知识点
- const总结
- const总结
- Const总结
- const总结
- const总结
- const总结
- const总结
- const 总结
- const总结
- const总结
- const 总结
- const总结
- const 总结
- 学习type of和instanceof
- iOS app被拒------支付功能审核被拒(虚拟产品)Guideline 3.1.1
- Python实证式算法评估
- Linux系统UID和GID详解
- GPML toolbox -- document
- const知识点总结
- Flash与文件系统
- HDU-5980-水题-二进制转换
- hashSet判断是否是同一对象
- theano records
- RAC重启遭遇ORA-01078、ORA-01565、ORA-17503、ORA-12547错误
- windows下GitHub的SSH
- C++链表类模板
- 前台参数杂乱,后台如何接收数据