Vio*_*ffe 3 vector push-back c++11
考虑一下代码:
class T;
void constructVector(const T* item)
{
std::vector<T*> v;
v.push_back(item);
}
Run Code Online (Sandbox Code Playgroud)
我在使用MSVC 2010编译器时遇到错误:
错误:C2664:'void std :: vector <_Ty> :: push_back(_Ty &&)':无法使用[_Ty = T*]将参数1从'const T*'转换为'T*&&'转换失去限定符
我可以看到这种特殊的转换是非法的,但我不相信我的代码在语义上是错误的.我也相信有push_back(const T&)变种,为什么不符合我的要求?
小智 7
因为那是非常量指针的向量.它不会将const指针转换为非const指针.那会破坏const的目的.
我相信push_back(const T&)不是你想要的,因为这使得T对象本身是 const,它不会将T 的类型从(*)改为(const*).
你可以使向量成为const指针的向量:
void constructVector(const T* item)
{
std::vector<const T*> v;
v.push_back(item);
}
Run Code Online (Sandbox Code Playgroud)
或者您可以更改函数以获取非const指针:
void constructVector(T* item)
{
std::vector<T*> v;
v.push_back(item);
}
Run Code Online (Sandbox Code Playgroud)