首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

const 的含义有关问题

2013-03-19 
const 的含义问题?我在学习C++ 类 的过程中看到了几种不同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关键字定义的成员数据,是可以在改函数的函数体内修改的。
针对第三种情况,举个例:

第三种:(函数后面的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();
           }
  

热点排行