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