#include <vector>
using std::vector;
class A
{
public:
A()
{
buf.push_back(65);
buf.push_back(66);
buf.push_back(67);
}
~A(){}
const char * getA() const
{
// why never run here?
return &buf[0];
}
const char * getA()
{
return &buf[0];
}
char * getB() const
{
// why compile error?
return &buf[0];
}
char * getB()
{
return &buf[0];
}
private:
vector<char> buf;
};
int main()
{
A a;
const char * pc = a.getA();
const char * const cp = a.getA();
char * p = a.getB();
}
两个问题:
1>为什么会出现编译错误?
2>为什么
const char * getA() const
永远不会被调用?(在我看来,应该先调用这个,因为我不会改变对象)
我调试了 vector 类实现并发现
reference operator[](size_type _Pos) const {...}
被称为 ,而不是
const_reference operator[](size_type _Pos) const{...}
一个。
PS:我用的是VS2010
最佳答案
问题一
存在编译器错误,因为您已将 getB()
声明为 const
。因此,buf
实际上是 const
,因此 operator[]
将返回对成员元素的 const
引用。
问题二
getA()
的重载永远不会被调用,因为 a
不是 const
,所以非 const
过载优先。如果你这样做:
const A *p = &a;
p->getA();
然后将调用 const
重载。
关于c++ - 返回指向 vector 数据的指针的最佳方法是什么? const 还是非常量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7012073/