C++ const-cast 一个引用

C++ const-cast a reference

本文关键字:一个 引用 const-cast C++      更新时间:2023-10-16

这是正确的吗?它使用我的编译器编译,但我被告知它不能使用 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_cast用于

删除变量的常量。也就是说,如果你有const A& a你可以写A& b = const_cast<A&>(a).现在,您将能够修改b或对其调用非 const 方法。

在这种情况下,您可以从常规iterator构造const_iterator,即使不使用const_cast,这也始终是可能的。请记住,这是两种不同的类型,只是const_iterator碰巧可以从iterator C++常量构造,在这种情况下没有太大关系。

iteratorconst_iterator(通常)是不同的类型,因此您无法强制转换引用。但是,iterator可以转换为const_iterator,所以你可以这样做

return funct(static_cast<ConstIterator>(iter));

或者,更安全,因为它只允许显式转换:

ConstIterator citer = iter;
return funct(citer);