考虑一下这段代码:
class T;
void constructVector(const T* item)
{
std::vector<T*> v;
v.push_back(item);
}
我在使用MSVC 2010编译器时遇到错误:
错误:C2664:'void std :: vector&lt; _Ty&gt; :: push_back(_Ty&amp;&amp;)':不能 将参数1从'const T *'转换为'T *&amp;&amp;'用[ _Ty = T *]转换失去限定符
我可以看到这种特殊的转换是非法的,但我不相信我的代码在语义上是错误的。我也相信有push_back(const T&)
变种,为什么这不符合我的要求?
答案 0 :(得分:6)
因为那是非常量指针的向量。它不会将const指针转换为非const指针。这会破坏const的目的。
我相信push_back(const T&amp;)不是你想要的,因为这使得T对象本身 const,它不会改变类型。
你可以使向量成为const指针的向量:
void constructVector(const T* item)
{
std::vector<const T*> v;
v.push_back(item);
}
或者你可以改变你的函数来取一个非常量指针:
void constructVector(T* item)
{
std::vector<T*> v;
v.push_back(item);
}
答案 1 :(得分:0)
删除const
void constructVector( const T * item);
或
使用:
void constructVector(const T* item)
{
std::vector<const T*> v;
v.push_back(item);
}