C/C++中有关const的用法
2015-04-19 07:21
260 查看
整理自网络
1、const修饰普通变量和指针
①const修饰普通变量有两种写法:
const TYPE value;
TYPE const value;
两种写法效果一致,含义为:const修饰的类型为TYPE的变量value是不可变的
②const修饰指针变量
分四种写法如下:
A: const char *p;
B: char * const p;
C: char const *p;
D: const char* const p;
对于前三种可以改写为:
A: const (char) *p;
B: (char*) const p;
C: (char) const *p;
根据const修饰一般变量的规则,A=C
对于A,C, const修饰的类型为char的变量*p为常量,所以,p所指向的内容为常量不可改变。
对于B, 含义为const修饰的类型为char*的变量p为常量,因此,p指针本身为常量不可改变。
对于D, 其实为A,B混合体,表示指针本身和指针指向的内容两者都为常量不可改变。
一种区别方式:
沿着*号画一条线,如果const位于*的左侧,则const就是用来修饰指针所指向的变量,即指针指向的内容为常量;
如果const位于*的右侧,const就是修饰指针本身,即指针本身是常量。
2、const修饰函数参数
const修饰函数参数表示函数体重不能修改参数的值(包括参数本身的值或者参数中包含的值)
①参数为指针
void fun(const int var); //传递过来的参数在函数内不可以改变(无意义,因为Var本身就是形参)
void fun(const char *var); //参数指针所指内容为常量不可变
void fun(char* const var);//参数指针本身为常量不可变(无意义,因为char* var是形参,不是真正的实参本身,修改了不会影响实参)
②参数为引用
void fun(const type& var);//引用参数在函数内为常量不可改变
3、const 修饰函数返回值
const 修饰函数返回值的含义和const 修饰普通变量及指针的含义基本相同
①const int fun1(); //返回值不可改变,但没有意义,因为返回值本身是右值
②const int * fun2();
调用时const int *p = fun2(); 把fun2()看成是一个变量,那么就如上面1.①所示,表示指针指向的内容不可改变。
③int * const fun3();
调用时 int * const p = fun3(); 把fun3()看成一个变量,那么就如上面1.②所示,表示指针本身不可变。
4、const 修饰类对象、对象指针、对象引用
const 修饰类对象表示该对象为常量对象,其中的任何成员都不能被修改。对于对象指针和对象引用也是一样。
const 修饰的对象,该对象的任何非const成员函数都不能被调用,因为任何非const成员函数都会有修改成员变量的企图。
例:
class AAA
{
void fun1();
void fun2() const;
};
const AAA obj;
obj.fun1(); //错误,常对象不能调用非 '常成员函数'
obj.fun2();//正确
5、const 修饰成员变量
const 修饰类的成员变量,表示成员常量,不能被修改,同时它只能在初始化列表中赋值
class A
{
……
const int Value; //成员常量不能被修改
……
A(int x): Value(x){} //只能在初始化列表中赋值
}
6、const 修饰成员函数
const 修饰类的成员函数,则该成员函数不能修改类中的任何成员变量,也不能调用类中的任何非const 成员函数
class A
{
……
void fun() const;
};
对于const 类对象、指针、引用,只能调用类的const 成员函数,因此,const 修饰成员函数的最重要的作用就是限制对于const对象的使用
7、const 常量与define宏定义的区别
①编译器处理方式不同
define宏是在预处理阶段展开
const常量是编译运行阶段使用
②类型和安全检查不同
define 宏没有类型,不做任何类型检查,仅仅是展开
const 常量有具体的类型,在编译阶段会执行类型检查
③存储方式不同
define 宏仅仅是展开,有多少地方使用,就展开多少次,不分配内存
const 常量会在内存中分配(可以是堆或者栈)
1、const修饰普通变量和指针
①const修饰普通变量有两种写法:
const TYPE value;
TYPE const value;
两种写法效果一致,含义为:const修饰的类型为TYPE的变量value是不可变的
②const修饰指针变量
分四种写法如下:
A: const char *p;
B: char * const p;
C: char const *p;
D: const char* const p;
对于前三种可以改写为:
A: const (char) *p;
B: (char*) const p;
C: (char) const *p;
根据const修饰一般变量的规则,A=C
对于A,C, const修饰的类型为char的变量*p为常量,所以,p所指向的内容为常量不可改变。
对于B, 含义为const修饰的类型为char*的变量p为常量,因此,p指针本身为常量不可改变。
对于D, 其实为A,B混合体,表示指针本身和指针指向的内容两者都为常量不可改变。
一种区别方式:
沿着*号画一条线,如果const位于*的左侧,则const就是用来修饰指针所指向的变量,即指针指向的内容为常量;
如果const位于*的右侧,const就是修饰指针本身,即指针本身是常量。
2、const修饰函数参数
const修饰函数参数表示函数体重不能修改参数的值(包括参数本身的值或者参数中包含的值)
①参数为指针
void fun(const int var); //传递过来的参数在函数内不可以改变(无意义,因为Var本身就是形参)
void fun(const char *var); //参数指针所指内容为常量不可变
void fun(char* const var);//参数指针本身为常量不可变(无意义,因为char* var是形参,不是真正的实参本身,修改了不会影响实参)
②参数为引用
void fun(const type& var);//引用参数在函数内为常量不可改变
3、const 修饰函数返回值
const 修饰函数返回值的含义和const 修饰普通变量及指针的含义基本相同
①const int fun1(); //返回值不可改变,但没有意义,因为返回值本身是右值
②const int * fun2();
调用时const int *p = fun2(); 把fun2()看成是一个变量,那么就如上面1.①所示,表示指针指向的内容不可改变。
③int * const fun3();
调用时 int * const p = fun3(); 把fun3()看成一个变量,那么就如上面1.②所示,表示指针本身不可变。
4、const 修饰类对象、对象指针、对象引用
const 修饰类对象表示该对象为常量对象,其中的任何成员都不能被修改。对于对象指针和对象引用也是一样。
const 修饰的对象,该对象的任何非const成员函数都不能被调用,因为任何非const成员函数都会有修改成员变量的企图。
例:
class AAA
{
void fun1();
void fun2() const;
};
const AAA obj;
obj.fun1(); //错误,常对象不能调用非 '常成员函数'
obj.fun2();//正确
5、const 修饰成员变量
const 修饰类的成员变量,表示成员常量,不能被修改,同时它只能在初始化列表中赋值
class A
{
……
const int Value; //成员常量不能被修改
……
A(int x): Value(x){} //只能在初始化列表中赋值
}
6、const 修饰成员函数
const 修饰类的成员函数,则该成员函数不能修改类中的任何成员变量,也不能调用类中的任何非const 成员函数
class A
{
……
void fun() const;
};
对于const 类对象、指针、引用,只能调用类的const 成员函数,因此,const 修饰成员函数的最重要的作用就是限制对于const对象的使用
7、const 常量与define宏定义的区别
①编译器处理方式不同
define宏是在预处理阶段展开
const常量是编译运行阶段使用
②类型和安全检查不同
define 宏没有类型,不做任何类型检查,仅仅是展开
const 常量有具体的类型,在编译阶段会执行类型检查
③存储方式不同
define 宏仅仅是展开,有多少地方使用,就展开多少次,不分配内存
const 常量会在内存中分配(可以是堆或者栈)
相关文章推荐
- C++有关const用法的详解
- 有关c++中const用法
- C++中const用法总结
- C/C++开发语言系列之1--const用法总结1
- c++中const的用法详解
- C++中的const成员函数(函数声明后加const,或称常量成员函数)用法详解
- c++ const的其他修饰用法
- C++中const用法总结
- C++中const、volatile、mutable的用法
- C++中的const的用法
- C++中const用法总结
- 关于C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性。
- C++中const用法总结
- C++中const用法总结
- C++中const用法总结
- C++中const用法总结
- C++中const用法的总结
- C++中const、volatile、mutable的用法
- C++中const用法总结
- C++中const、volatile、mutable的用法介绍