![](/img/trans.png)
[英]Lifetime extension of temporary by non-const reference using const-cast
[英]C++ const-cast a reference
这个对吗? 它可以使用我的编译器进行编译,但是有人告诉我它不使用AIX。
typedef std::vector<Entry>::iterator Iterator;
typedef std::vector<Entry>::const_iterator ConstIterator;
bool funct(ConstIterator& iter) const;
inline bool funct(Iterator& iter){return funct(const_cast<ConstIterator&>(iter));}
我应该怎么做才能使我的代码在AIX平台上编译? (除了使用Ctrl-C Ctrl-V重新实现非const版本外)。
const_cast
用于删除变量的常数。 也就是说,如果您具有const A& a
,则可以编写A& b = const_cast<A&>(a)
。 现在,您将可以修改b
或对其调用非常量方法。
在这种情况下,您可以从常规iterator
构造const_iterator
,即使不使用const_cast
也总是可能的。 请记住,这是两种不同的类型,而const_iterator
恰好是可以从iterator
构造的,在这种情况下,C ++ const-ness没什么要紧的。
iterator
和const_iterator
(通常)是不同的类型,因此您不能转换引用。 但是, iterator
可转换为const_iterator
,因此您可以执行
return funct(static_cast<ConstIterator>(iter));
或者,更安全,因为它仅允许显式转换:
ConstIterator citer = iter;
return funct(citer);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.