将非常量参数传递给常量参数

时间:2012-03-23 12:51:58

标签: c++ function

假设我有这样的功能

my_method(const vector<const T*> & param); 

我想知道我是否可以这样调用这个函数

vector<T*> my_vector;
my_method(my_vector);

3 个答案:

答案 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)

试一试,看看:http://codepad.org/dHQzwMyH

简短回答 - 不。一个

vector<const T*> my_vector;
然而,

会起作用。