+ -
当前位置:首页 → 问答吧 → 有人说理解不了C++的const,特发此帖,大牛轻砸

有人说理解不了C++的const,特发此帖,大牛轻砸

时间:2010-06-28

来源:互联网

本帖最后由 xyfree 于 2010-06-28 18:12 编辑

1. C++里面的const,用于修饰数据时,效果和C是一样的,这个不用多说吧?

2. C++ 中 const 也可用于修饰成员方法

    这时候的效果是怎样? 首先要知道 C++中的成员方法,和C中的普通函数有何差别?
  1. class Sample {
  2. public:
  3.     int sample_method() { return sample_property; }
  4. private:
  5.     int sample_property;   
  6. };
复制代码
实际上,成员方法 Sample::sample_method 的定义会被编译器改写成这样;
  1. int Sample_sample_method(Sample *const this) {
  2.     return this->sample_property;
  3. };
复制代码
C++建议,如果成员函数不修改对象,声明为const,就是说,这样声明:
  1. class Sample {
  2. public:
  3.     int sample_method() const;

  4.     // 以下从略   
  5. };
复制代码
实际上,加了const修饰之后的成员方法 Sample::sample_method 的定义会被编译器改写成这样;
  1. int Sample_sample_method(const Sample *const this) {
  2.     return this->sample_property;
  3. };
复制代码
const Sample *const this 的意思就是
指针所指向的Sample对象是不可改变的,指针的指向也是不可改变的。


不明白的后面跟帖回复。

作者: xyfree   发布时间: 2010-06-28

我现在主站没权限了,等有了再说吧。

作者: prolj   发布时间: 2010-06-28

这个明白

作者: chinesedragon   发布时间: 2010-06-28

回复 prolj


    再说什么?

作者: xyfree   发布时间: 2010-06-28

是不是就指针常量和常量指针的问题
C++真的不懂,不过楼主解释成员方法的内在形式,有点启发,C++编译器应该是C语言实现的。。心理平衡了一点。

作者: peijue   发布时间: 2010-06-28

const这玩意有传染性,不爽。

作者: donglongchao   发布时间: 2010-06-28

热门下载

更多