在编写自定义迭代器类型时,我决定希望能够从const迭代器转换为非const迭代器。我编写了以下const arr = ['one','two','three','three','five'];
const clone = arr.slice()
clone[3] = 'four';
console.log(clone);
函数。由于某种原因,编译器无法推断remove_const
与const P
相同。我从GCC 8.2中收到的错误是const int*
。
我的代码中是否存在阻止编译器正确推论的内容?另外,如果有更好的方法来做我想做的事,我很想知道。
types 'const P' and 'const int*' have incompatible cv-qualifiers
答案 0 :(得分:5)
对于const P
,const
直接在P
上限定,给定P
为int *
,const P
将为int * const
(即const
指针),而不是const int *
(指向const
的指针)。
您可以将代码更改为
template <int I, typename PtoC>
auto remove_const(my_iterator<I, PtoC> it) {
using PtoNC = std::add_pointer_t<std::remove_const_t<std::remove_pointer_t<PtoC>>>;
return my_iterator<I, PtoNC> { const_cast<PtoNC>(it.ptr) };
}