C++11 为什么可以';我不能将常量指针推送到std::vector吗?

C++11 为什么可以';我不能将常量指针推送到std::vector吗?,c++11,vector,push-back,C++11,Vector,Push Back,考虑一下这段代码: class T; void constructVector(const T* item) { std::vector<T*> v; v.push_back(item); } T类; 无效构造向量(常数T*项) { std::向量v; v、 推回(项目); } MSVC 2010编译器出现错误: 错误:C2664:'void std::vector::push_back('u Ty&&'):无法 将参数1从'const T*'转换为'T*&&'[

考虑一下这段代码:

class T;

void constructVector(const T* item)
{
   std::vector<T*> v;
   v.push_back(item);
}
T类;
无效构造向量(常数T*项)
{
std::向量v;
v、 推回(项目);
}
MSVC 2010编译器出现错误:

错误:C2664:'void std::vector::push_back('u Ty&&'):无法 将参数1从'const T*'转换为'T*&&'[ _Ty=T*]转换将丢失限定符


我可以看出这种特殊的转换是非法的,但我不认为我的代码在语义上是错误的。我也相信有推回(const T&)变体,为什么它与我的呼叫不匹配呢?

Drop
const

无效向量(常数*项)

使用:

void构造函数向量(常量T*项)
{
std::向量v;
v、 推回(项目);
}

因为这是一个非常量指针向量。它不会将常量指针转换为非常量指针。那将违背const的目的

我相信push_back(const T&)不是您想要的,因为它使T对象本身成为const,它不会将T的类型从(*)更改为(const*)

您可以将向量设置为常量指针的向量:

void constructVector(const T* item)
{
    std::vector<const T*> v;
    v.push_back(item);
 }
void构造函数向量(常量T*项)
{
std::向量v;
v、 推回(项目);
}
或者您可以将函数更改为采用非常量指针:

 void constructVector(T* item)
 {
    std::vector<T*> v;
    v.push_back(item);
 }
void构造向量(T*项)
{
std::向量v;
v、 推回(项目);
}

你有一个非常量项的向量,你正在推一个常量项。它告诉你它们不是一回事。@Jay:哦,我明白你的意思了!愚蠢的问题。很明显,
const
是这里的阻碍,直到Jay的评论,我才明白为什么。
 void constructVector(T* item)
 {
    std::vector<T*> v;
    v.push_back(item);
 }