【发布时间】:2012-01-24 22:31:29
【问题描述】:
有一个类A包含两个重载方法getItems();
typedef std::vector <int> TItems;
template <typename T>
class A
{
private:
T a;
TItems items;
public:
A(){}
A ( const T a_, const TItems & items_) : a(a_) , items (items_) {}
bool operator () ( const A <T> &aa ) {return a < aa.a;}
TItems const & getItems() const {return items}
TItems & getItems() {return items}
};
和A对象的集合
template <typename T>
struct TSet {typedef std::set <A <T> > Type;};
我想返回 const 引用/对 TItems 的引用,但只有第二种方法有效
int main ()
{
TSet <double> ::Type t;
TSet <double> ::Type::iterator it = t.begin();
t.insert (A <double>( 5, TItems(10,10)));
const TItems *items = &(it->getItems()); //OK
TItems *items = &(it->getItems()); //Error
}
Error 1 error C2440: 'initializing' : cannot convert from 'const TItems *' to 'TItems *
这是非常量引用能够修改 A 对象导致集合的潜在重新排列的原因吗?但是集合中的项目不是按 A.items 排列而是按 a.
有没有办法使用非常量引用修改 A.items?
【问题讨论】:
标签: c++ reference set constants