返回指向矢量数据的指针的最佳方法是什么?const还是非const?

Sid*_*ang 1 c++ stl visual-studio-2010

#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();
}
Run Code Online (Sandbox Code Playgroud)

两个问题:

1>为什么会出现编译错误?

2>为什么

const char*getA()const

永远不会被叫?(在我看来,首先应该调用这个,因为我不会改变对象)

我已经进入了矢量类实现并找到了

reference operator [](size_type _Pos)const {...}

被称为,而不是

const_reference运算符[](size_type _Pos)const {...}

一.

PS:我使用的是VS2010.

Oli*_*rth 5

问题1

由于您已声明getB()为,因此存在编译器错误const.因此,buf实际上是有效的const,因此operator[]将返回const对成员元素的引用.

问题2

那个getA()永远不会被调用的重载因为a不是const,所以非const重载优先.如果你这样做:

const A *p = &a;
p->getA();
Run Code Online (Sandbox Code Playgroud)

然后const调用重载.