考虑以下模式:
class Child
{
public:
char Foo;
Child(char foo)
{
Foo = foo;
}
};
class Parent
{
public:
Child c;
Parent() : c('A') { }
const Child& GetChild() const
{
return c;
}
};
// Scenario 1: Works, but useless
int main()
{
Parent p = Parent();
Child c = p.GetChild();
c.Foo = 'B';
cout << p.c.Foo << endl; // A, wrong
cout << c.Foo << endl; // B, good
system("PAUSE");
}
// Scenario 2: Doesn't compile, of course
int main()
{
Parent p = Parent();
Child& c = p.GetChild(); // Error
c.Foo = 'B';
cout << p.c.Foo << endl; // A, good
cout << c.Foo << endl; // B, good
system("PAUSE");
}
规格如下:
- getter 必须定义为 const(因为它不修改 Parent)
- getter 给出的引用必须修改基础值
问题是:
- 如果 getter 本身是 const,C++ 要求 getter 的返回值是 const(为什么?)
- C++ 禁止将 const 值分配给引用(逻辑上)
使用指针很容易做到这一点(使访问器返回Child*
),但似乎有一个共识(并且理所当然地)认为引用是可取的,因为它们隐藏了指针的复杂性。
有什么办法吗?如果没有,我将回到指针。