我在一本96年出版的有关c++的书籍中看到有关const类成员函数的声明是这样的:
void SomeFunction() const;void SomeClass::SomeFunction() const
{
……;
}
而我原来看见的例子都是把const关键字放在前面的,为了检验它们的不同,
我专门把我原来的一个程序做了改变看看它们有什么不同。
原程序如下:
在头文件中声明如下:
public:
const CStringList& GetElements();
private:
CStringList m_listElements;实现文件部分如下:
const CStringList& CListVDoc::GetElements()  
{
return m_listElements;
}
程序中把函数GetElements声明为const,是希望m_listElements是只读的。我把上面程序中的const都移到了句尾,编译却不能通过。请问,把关键字const放在句首和句尾有什么区别,为什么做了调换程序就
就错了呢?

解决方案 »

  1.   

    const char * a::f() const后面的那个const 表示:
    a::f() 可以被常对象调用

    const a obj;
    obj.f();前面的表示返回的是一个常指针,即该指针指向的内容不可以被修改
      

  2.   

    将const放前面的话,表示函数的返回值是个const即不能够修改.
    你看是不是声明和定义没有全改,只改了其中的一个
      

  3.   

    任何不会修改数据成员的函数都应该声明为const类型。如果在编写const成员函数时,不慎修改了数据成员,或者调用了其它非const成员函数,编译器将指出错误,这无疑会提高程序的健壮性。
    以下程序中,类stack的成员函数GetCount仅用于计数,从逻辑上讲GetCount应当为const函数。编译器将指出GetCount函数中的错误。
    class Stack
    {
      public:
    void  Push(int elem);
    int  Pop(void);
    int GetCount(void)  const; // const成员函数
      private:
    int m_num;
    int m_data[100];
    }; int Stack::GetCount(void)  const
    {
    ++ m_num; // 编译错误,企图修改数据成员m_num
    Pop(); // 编译错误,企图调用非const函数
    return m_num;
    }
    const成员函数的声明看起来怪怪的:const关键字只能放在函数声明的尾部,大概是因为其它地方都已经被占用了。请搜索 《高质量C++编程指南》
    写得好极了,大家都看看吧。
      

  4.   

    const放在函数声明前面,只用于修饰反回值。但具体使用上大有讲究,
    还是找这本小册子看看,《高质量C++编程指南》