C++ 中的const用法整理
2015-12-26 11:39
441 查看
const在C++中是一个十分重要的修饰符,而它的用法在不同的也有很多种,除了我们常用的,还有一些不常用的。今天一并全部整理。const 是对变量或对象起保护作用,防止变量或对象被修改。下面来讲解其中的用法。
const int* a = &b;或int const *a = b; 两者为等效
int* const a = &b;
const int* const a = &b;
我们将这个分为const在*号前和*后,*前就表示指针所指的变量时const常量。*后就表示指针本身就是const 常量。其他即可不管。上述第一个即指针a指向的变量时一个const常量,而第二个则表示指针变量a为const常量。第三个当然就是前面两种的结合。用的很少。
举例说明:void input(const int a,const int b);代表的传入的参数a和b为const常量,在函数内部不会被修改。用作保护传入参数防止被函数内部的操作修改。
const 与 返回值
对于一般函数而言,返回值其实没有添加const的必要,例如 int getresult();一般都是使用返回值进行左值运算,而getresult() = 3;这种用法是错误的。那么,这个const与返回值有何作用呢?我们举例说明
class testDemo
{
public:
int a;
int b;
public:
int &getResult()
{
return a;
}
}
上述代码中,我们是能够执行 getResult() = 3;这样的操作的,因为函数 int &getResult();返回的是当前类成员变量a的引用。即返回的是成员变量a。而getResult() = 3;的含义就是 testDemo::a = 3;因此,这个时候,添加const 在返回值之前,就是保护这个成员变量不被修改。至于添加引用本身就是为了能够对成员变量进行变相的赋值,而在此添加const 则是阻止它的赋值。其实还是有些矛盾的。
函数尾部+const
这种情况用的很少,我们依旧举例说明:
class testDemo
{
public:
int a;
int b;
public:
int &getResult()
{
return a;
}
int read()const
{
return b;// 返回成员变量b的值
}
}
上述代码中,在int read();函数后面添加了const修饰符,起到什么样的作用呢?其实,这个函数是保护在read()函数内部,类的成员变量不被修改,是所有的成员变量均不能被修改。这个函数入口处没有指定具体变量。
1. 变量和const的关系
举例说明:const int a = 3; 表示变量a为const 类型常量,即a无法被修改。其中的int是变量类型的借代,但不包括指针,指针下面再讲。其中 const int a 和int const a 用法上没有区别,都是用来修饰a这个变量的。2.指针和const的关系
指针和const的关系总共有3中,分别为:const int* a = &b;或int const *a = b; 两者为等效
int* const a = &b;
const int* const a = &b;
我们将这个分为const在*号前和*后,*前就表示指针所指的变量时const常量。*后就表示指针本身就是const 常量。其他即可不管。上述第一个即指针a指向的变量时一个const常量,而第二个则表示指针变量a为const常量。第三个当然就是前面两种的结合。用的很少。
3.const和成员函数的关系
const 与传入参数举例说明:void input(const int a,const int b);代表的传入的参数a和b为const常量,在函数内部不会被修改。用作保护传入参数防止被函数内部的操作修改。
const 与 返回值
对于一般函数而言,返回值其实没有添加const的必要,例如 int getresult();一般都是使用返回值进行左值运算,而getresult() = 3;这种用法是错误的。那么,这个const与返回值有何作用呢?我们举例说明
class testDemo
{
public:
int a;
int b;
public:
int &getResult()
{
return a;
}
}
上述代码中,我们是能够执行 getResult() = 3;这样的操作的,因为函数 int &getResult();返回的是当前类成员变量a的引用。即返回的是成员变量a。而getResult() = 3;的含义就是 testDemo::a = 3;因此,这个时候,添加const 在返回值之前,就是保护这个成员变量不被修改。至于添加引用本身就是为了能够对成员变量进行变相的赋值,而在此添加const 则是阻止它的赋值。其实还是有些矛盾的。
函数尾部+const
这种情况用的很少,我们依旧举例说明:
class testDemo
{
public:
int a;
int b;
public:
int &getResult()
{
return a;
}
int read()const
{
return b;// 返回成员变量b的值
}
}
上述代码中,在int read();函数后面添加了const修饰符,起到什么样的作用呢?其实,这个函数是保护在read()函数内部,类的成员变量不被修改,是所有的成员变量均不能被修改。这个函数入口处没有指定具体变量。
相关文章推荐
- C语言和OC的区别? 面向对象和面向过程的区别?
- C++ 复制控制
- C++指针数组、数组指针、函数指针
- 纠正《Effective C++(第三版)》侯捷译 中文版中,第31条款中原文“最后,不论Handle classes或Interface classes,一旦脱离inline函数都无法...”的误译
- Dijkstra's Shortest Path - C++ for C Programmers 2.5
- c++配置mysql,读取的基本api
- C++连接本地SQL数据库
- Effective C++ 条款24
- libc++abi.dylib: terminate_handler unexpectedly threw an exception
- 程序员之---C语言细节22(函数返回指针注意事项<悬空指针>、查看进程能够分配的内存大小)
- C++ primer (第五版)学习记录1
- 求一个面的法向 c++
- 求矩阵的逆矩阵 c++
- C语言strcat(连接两字符串)用起来真不爽
- C语言字符串操作总结大全(超详细)
- C语言字符数组与字符串的使用详解
- 笔试趣题集锦
- C++链接器工具错误:LNK2001, LNK2019
- C语言九九乘法表
- 【C语言】求1-3+5-7+...-99+101的值。