好的,所以我在一个名为vector_ref
的类中有一个函数class vector_ref {
public:
int* data() const { return m_data }
void retarget(std::vector<int> const& _t)
{ m_data = _t.data();
m_count = _t.size() }
private:
int* m_data;
size_t m_count;
}
我正在尝试将vector_ref对象重新定位到名为v的现有矢量对象,该对象由int和call data()填充。
vector_ref<int> tmp;
tmp.retarget(const_cast<std::vector<int> const&>(v));
tmp.data(); // error here
传递给重新定位编译,但调用data()会产生错误:
invalid conversion from const int* to int* { m_data = v.data() ... }
这对我来说很有意义,因为成员变量m_data
不是const
,但是根据这个类定义,我怎么能retarget
到现有的vector
。如果我必须通过const
引用retarget()
来设置非const
成员变量m_data
,我怎么能希望成功编译成功重新定位的代码vector_ref
实例?
答案 0 :(得分:3)
只需将m_data
声明为
const int* m_data;
这并不意味着m_data
是const
。这意味着您无法修改int
指向的m_data
。所以你仍然可以这样做:
m_data = _t.data();
但你不能这样做:
*m_data = x;
m_data[5] = y; // or this
顺便说一句,您不需要const_cast
。如果要删除const限定符(即将const_cast
对象传递给需要非const引用的函数),则需要const
。您不需要它,以便将非const对象传递给接受const引用的函数。