const 的含义有关问题
const 的含义问题?
我在学习C++ 类 的过程中看到了几种不同const的出现位置,但具体不能表述清楚各自的含义是什么。书上说的好像很抽象,也没怎么很清晰的理解到,故来求教了。
第一种:
const int(类类型) XXX; (定义某对象时,声明对象类型前面的const)
第二种:(函数中的const)
Class XX{
public:
void Func(const string XXX){函数体};
private:
XXXXX
};
第三种:(函数后面的const)
Class XX{
public:
int Getvalue() const;
private:
XXX
};
谁能较为清晰,成体系的告诉我一下,这几个const分别是代表了什么含义,它限制了一些什么行为?谢谢了。
------解决方案--------------------
第一种:
const int(类类型) XXX; (定义某对象时,声明对象类型前面的const)
表示 xxx是一个常量,不能被修改
第二种:(函数中的const)
Class XX{
public:
void Func(const string XXX){函数体};
表示在函数Func中,xxx是一个常量,不能被修改
private:
XXXXX
};
第三种:(函数后面的const)
Class XX{
public:
int Getvalue() const;
表示Getvalue函数中,不会修改XX这个类中的任何数据
private:
XXX
};
------解决方案--------------------
const只意味着只读,不表示不变。
除了第三个用法有意义,你的前面两个用法没有多大意义(语法OK,实际没有意义)。
const一般修饰函数指针/引用类型的形参,表示不会在函数改变其实参。
------解决方案--------------------
const int(类类型) XXX;
这个是保证 int类型的 XXX 是不会(也不允许)被修改。
void Func(const string XXX){函数体}
这个是保证 string类型的实参是以常量传递进来的,在函数体内,是不允许修改这个实参的值
int Getvalue() const;
这个是保证 在函数提内,不会改变 XX类的对象的任意成员数据。但是有一种情况例外:用mutable关键字定义的成员数据,是可以在改函数的函数体内修改的。
针对第三种情况,举个例:
------解决方案--------------------
1、定义一个常量,C++中是极力推荐用const代替#define的;
2、你写的这个场景没什么意义,参数是局部变量,改不改对外部没影响,const修饰函数参数时,是明确指出不会修改传递进来的参数,原型是void Func(const string& XXX); void Func(const char* XXX); ...之类的;
3、const作为函数后缀时,是修饰成员函数的this指针的,作用与第二点是一样的。有些场景下,是必须加这个const的,例如:
int f(const XX& src)
{
return src.Getvalue();
}
我在学习C++ 类 的过程中看到了几种不同const的出现位置,但具体不能表述清楚各自的含义是什么。书上说的好像很抽象,也没怎么很清晰的理解到,故来求教了。
第一种:
const int(类类型) XXX; (定义某对象时,声明对象类型前面的const)
第二种:(函数中的const)
Class XX{
public:
void Func(const string XXX){函数体};
private:
XXXXX
};
第三种:(函数后面的const)
Class XX{
public:
int Getvalue() const;
private:
XXX
};
谁能较为清晰,成体系的告诉我一下,这几个const分别是代表了什么含义,它限制了一些什么行为?谢谢了。
------解决方案--------------------
第一种:
const int(类类型) XXX; (定义某对象时,声明对象类型前面的const)
表示 xxx是一个常量,不能被修改
第二种:(函数中的const)
Class XX{
public:
void Func(const string XXX){函数体};
表示在函数Func中,xxx是一个常量,不能被修改
private:
XXXXX
};
第三种:(函数后面的const)
Class XX{
public:
int Getvalue() const;
表示Getvalue函数中,不会修改XX这个类中的任何数据
private:
XXX
};
------解决方案--------------------
const只意味着只读,不表示不变。
除了第三个用法有意义,你的前面两个用法没有多大意义(语法OK,实际没有意义)。
const一般修饰函数指针/引用类型的形参,表示不会在函数改变其实参。
------解决方案--------------------
const int(类类型) XXX;
这个是保证 int类型的 XXX 是不会(也不允许)被修改。
void Func(const string XXX){函数体}
这个是保证 string类型的实参是以常量传递进来的,在函数体内,是不允许修改这个实参的值
int Getvalue() const;
这个是保证 在函数提内,不会改变 XX类的对象的任意成员数据。但是有一种情况例外:用mutable关键字定义的成员数据,是可以在改函数的函数体内修改的。
针对第三种情况,举个例:
第三种:(函数后面的const)
Class XX{
public:
int Getvalue() const
{
++count;
retrun count;
}
private:
XXX
mutable int count;
};
------解决方案--------------------
1、定义一个常量,C++中是极力推荐用const代替#define的;
2、你写的这个场景没什么意义,参数是局部变量,改不改对外部没影响,const修饰函数参数时,是明确指出不会修改传递进来的参数,原型是void Func(const string& XXX); void Func(const char* XXX); ...之类的;
3、const作为函数后缀时,是修饰成员函数的this指针的,作用与第二点是一样的。有些场景下,是必须加这个const的,例如:
int f(const XX& src)
{
return src.Getvalue();
}