每隔一段时间我就会被这个挂断,没有人真正能够给出令人满意的答案。
在这样的(诚然人为的)例子中......
typedef std::string _str;
class MyClass
{
public:
MyClass(const _str &s) : m_str(s) { }
private:
const _str &m_str;
}
... 事情和预期的差不多。该成员m_str
只能在构造函数初始化器列表中分配,以后不能重新分配,并且非常量迭代器不可用。好吧。但如果我们这样做...
typedef std::string _str;
typedef std::string &_strref;
class MyClass
{
public:
MyClass(const _strref s) : m_str(s) { }
void test() { m_str.append(std::string("why am I not const?")); }
private:
const _strref m_str;
}
... const 被删除。非成本方法可能会被调用m_str
并且可能会被重新分配,考虑到它已经const
写在它旁边,这是一种误导。
- 可以更正第二个示例以保持 const-ness 吗?
- c++ 规范在哪里/为什么表明这是正确的行为?
- 最佳实践对此有什么看法?