LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1115|回复: 6

const in C++

[复制链接]
发表于 2004-4-8 22:50:10 | 显示全部楼层 |阅读模式
Anyone want give a introduction about const in C++? Or just give a
suggestion to a good document? I am confused about when I should
use const and when I should not. And sometime a missing const will
lead to compilation error.
发表于 2004-4-9 06:28:00 | 显示全部楼层

回复: const in C++

最初由 lazyboy0001 发表
Anyone want give a introduction about const in C++? Or just give a
suggestion to a good document? I am confused about when I should
use const and when I should not. And sometime a missing const will
lead to compilation error.


const就是恒量,事实上他和变量(variable)的最大区别在于内存处理方式上,variable define的时候是要事先在内存上划出一个空间给他的, 而const则不需要。基本上const对于初级的programmer来说只是方便而已, 比如变量a=b/1.2345678900000...如果每次你都要输入那个超长的数字的话, 完全可以用const p=1.2345678900000,(而且又不浪费内存), 然后凡是要除以那个数字, 都可用p来表示了。。。而你说的const会在COMPILATION时出错, 我觉的有可能是属于内建的某些函数的parameter是要用const来pass的, 而你没有。。。 当你不知道系统或内建函数的参数的data type的时候, 建议先用man2 XXX来查看一下。;)
 楼主| 发表于 2004-4-9 09:10:43 | 显示全部楼层
Thanks. My problem is the about the usage of const in variable defination and member function defination. I have performed some tests of them. I will post my test codes and I hope I can get more suggestion or tips about const.
 楼主| 发表于 2004-4-9 09:12:47 | 显示全部楼层

const variable

#include <iostream>
using namespace std;

int main()
{
        int a = 10;
        int b = 2;

        const int *ptr0 = &b;       // (*ptr0) is const
        ptr0 = &a;
        // *ptr0 = b;    // invalid
       
        int * const ptr1 = &b;      // ptr1 is const
        *ptr1 = a;
        // ptr1 = &a;    // invalid

        const int * const ptr2 = &b; // both ptr2 and (*ptr2) are const
        // ptr2 = &a;     // invalid
        // *ptr2 = a;     // invalid

        int const * ptr3 = &b;       // (*ptr3) is const, same to ptr0
        ptr3 = &a;
        // *ptr3 = a;     // invalid

        int const * const ptr4 = &b; // both ptr4 and (*ptr4) are const
        // ptr4 = &a;     // invalid
        // *ptr4 = a;     // invalid

        int const *ptr5;             // (*ptr5) is const but ptr5 not
        ptr5 = &a;
        // *ptr5 = b;     // invalid

        // int * const ptr6;         // ptr6 is const, it need to be initialized
        // ptr6 = &a;     // invalid
        // *ptr6 = b;     // nonsense since ptr6 is not initialized
       
        return 0;
}
 楼主| 发表于 2004-4-9 09:17:53 | 显示全部楼层

const mem functions

#include <iostream>
using namespace std;

template <typename T>
class Data
{
public:
        Data();
        Data(const Data<T> &d);

        void setData(T const &d);
        const T getData() const;
        const T getData0();
        const T getData1() const;

private:
        T myData;
};

template <typename T>
Data<T>:ata() {}

template <typename T>
Data<T>:ata(const Data<T> &d) { myData = d.getData(); }

template <typename T>
void Data<T>::setData(T const &d) { myData = d; }

template <typename T>
const T Data<T>::getData() const
{
        return myData;
}

template <typename T>
const T Data<T>::getData0()
{
        myData = 3;
        return myData;
}

template <typename T>
const T Data<T>::getData1() const
{
        myData = 3;
        return myData;
}

int main()
{
        Data<double> theData;
        theData.setData(5);

        cout<<theData.getData()<<endl; // output: 5
        cout<<theData.getData0()<<endl; // output: 3
        // cout<<theData.getData1()<<endl; // can't get compiled.

        Data<double> newData(theData);
        cout<<theData.getData()<<endl; // output: 3
        cout<<newData.getData0()<<endl; // output: 3
//        cout<<newData.getData1()<<endl; // can't get compiled.
       
        return 0;
}
发表于 2004-9-7 22:07:17 | 显示全部楼层
顶一下,上面的那几个const都是什么意思?
发表于 2004-9-8 09:54:14 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表