是否可以将对jQuery
的引用转换为对std::list<int*>
的引用?
直接静态演员失败。
我遇到的问题是对象实例维护一个int *,和的列表 此列表可以通过引用返回:
std::list<const int*>
拥有getList()函数的const版本会很好 看起来像:
std::list<int*> &A::getList() { return theList; }
即int是const的,并且能够在不保留的情况下执行此操作 两个清单。
答案 0 :(得分:2)
对于编译器,list<int*>
和list<const int*>
是两种完全不相关的类型,与list<Foo>
和list<Bar>
相同。即使Foo
和Bar
相关,list<Foo>
和list<Bar>
之间也没有任何关系。
如果您想从list<const int*>
函数返回,则需要从原始list<int*>
构建自己的其他const
。无法进行直接演员/转换。
编辑您可以查看propagate_const
包装器提案,该提案还允许您将const
传播到数据。在这种情况下,您只需使用list<propagate_const<int*>>
定义列表,在const
函数中,您只需返回一个const引用const list<propagate_const<int*>>&
即可。指向的数据和都是const
。
答案 1 :(得分:0)
没有。它会(隐含地)违反const
安全。
通过const
引用添加const
值可以通过非const
引用进行修改。
下面:
std::list<int*> mod;
std::list<const int*>& nomod=magic_cast<std::list<const int*>>(mod);
const int x=19;
nomod.push_back(&x);
(*mod.first())++; //Oh dear!
magic_cast
是某个运营商执行您正在寻找的内容。
请注意,您已从x隐式删除了const。