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.
问题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调用重载.
| 归档时间: |
|
| 查看次数: |
212 次 |
| 最近记录: |