假设我有这样的功能
my_method(const vector<const T*> & param);
我想知道我是否可以这样调用这个函数
vector<T*> my_vector;
my_method(my_vector);
答案 0 :(得分:4)
你无法做你想做的事。 std::vector<T*>
与std::vector<const T*>
的类型不同,因此函数参数与函数参数不匹配。
如果它将一个类型的参数传递给期望另一个类型的参数的函数,那么您尝试做的不是“将非常量参数传递给常量参数”。
“将非常量参数传递给常量参数”将类似于
my_method(const vector<T*> & param);
vector<T*> v; // non const vector
my_method(v); // OK, method takes v by const reference, so it cannot be modify v.
那,你可以做到。
注意,在上面的示例中,my_method
无法修改vector v
,但由于v
包含非常量指针,因此指向的对象可以进行修改
答案 1 :(得分:1)
创建向量的副本,但使用const指针:
vector<T*> pointers;
vector<const T*> const_pointers(pointers.begin(), pointers.end());
my_method(const_pointers);
答案 2 :(得分:0)