我在一本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放在句首和句尾有什么区别,为什么做了调换程序就
就错了呢?
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放在句首和句尾有什么区别,为什么做了调换程序就
就错了呢?
a::f() 可以被常对象调用
即
const a obj;
obj.f();前面的表示返回的是一个常指针,即该指针指向的内容不可以被修改
你看是不是声明和定义没有全改,只改了其中的一个
以下程序中,类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++编程指南》
写得好极了,大家都看看吧。
还是找这本小册子看看,《高质量C++编程指南》