为什么我不能将const指针推送到std :: vector?

时间:2013-09-12 18:24:03

标签: c++11 vector push-back

考虑一下这段代码:

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&)变种,为什么这不符合我的要求?

2 个答案:

答案 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);
}