const修饰符
Posted narjaja
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了const修饰符相关的知识,希望对你有一定的参考价值。
一、const声明常量
类型前加const修饰符可声明常量。
1、const在类型前面
const int value; //value是const
const char *value; //*value是const, value可变
const (char *) value; //value是const,*value可变
char* const value; //value是const,*value可变
const char* const value; //value和*value都是const
2、const在类型后面
int const value; // value是const
char const * value; // *value是const, value可变
(char *) const value; //value是const,*value可变
char* const value; // value是const,*value可变
char const* const value; // value和*value都是const
3.总结
const在左侧指针所指的值不可改变,const在右侧指针不可改变。
二、const与函数
1.用const修饰函数的参数
函数参数类型前加const指明该参数为常量,在函数内部不可改变。
void func(const int x) {
//x不可以在内部进行赋值等操作.
}
注:当参数为引用传递或者指针传递作为输出时,都不能加const
2.用const修饰函数的返回值
- “值传递”函数会把返回值复制到外部临时的存储单元中,加const修饰没有任何价值。
- ”址传递”函数返回值只能被赋给加const修饰的同类型指针。
const int* func(void) //函数声明
...
int* a = func(); //报错
const int* b = func() //正确
- 函数引用返回
const int& func(void) //函数声明
...
int a = func(); //正确
const int& b = func() //正确
int& c = func() //报错
3const 成员函数
任何不会修改数据成员的函数都应该声明为const类型。如果在编写const成员函数时,不慎修改了数据成员,或者调用了其它非const成员函数,编译器将指出错误。
class test
{
public:
void func(){}
int getNum(void) const // const 成员函数
{
++num; // 编译错误,企图修改数据成员m_num
func(); // 编译错误,企图调用非const函数
return num;
}
private:
int num;
};
以上是关于const修饰符的主要内容,如果未能解决你的问题,请参考以下文章