相关疑难解决方法(0)

矢量和const

考虑一下

 void f(vector<const T*>& p)
 {
 }
 int main()
 { 
  vector<T*> nonConstVec;
  f(nonConstVec);
 }
Run Code Online (Sandbox Code Playgroud)

下列情况不compile.The事情是vector<T*>不能转换到vector <const T*>,这不合逻辑对我来说,因为存在从隐式转换T*const T*.为什么是这样 ?

vector<const T*>也不能转换为vector <T*>,但这是预期的,因为const T*无法隐式转换为T*.

c++ stl const vector

23
推荐指数
4
解决办法
3万
查看次数

与 const_cast 相反

我有一个std::vector<int*> v,我想防止进一步写入它。C++ 编译器不接受这个

const std::vector<const int*>& w = v;
Run Code Online (Sandbox Code Playgroud)

但它接受这一点

const std::vector<const int*>& w = reinterpret_cast<const std::vector<const int*>&>(v);
Run Code Online (Sandbox Code Playgroud)

后者确实适用于 Microsoft 的编译器,这意味着int*内部vconst int*内部w在内存中具有相同的地址。

这是偶然的,作为一种未指定的行为,还是有效的 C++ ?它是否适用于向量中的所有类型,例如std::vector<std::shared_ptr<int>>?如果无效,是否有另一种方法可以执行此转换?

我知道我也可以复制向量,但我想避免这种情况,因为我的向量非常大。

c++

3
推荐指数
1
解决办法
135
查看次数

标签 统计

c++ ×2

const ×1

stl ×1

vector ×1