C++中如何为vector指针添加两类const约束?
解答
C++的const修饰规则对所有类型(包括基础类型、STL容器等自定义类型)完全统一:const默认修饰其左侧的语法元素,若左侧无元素则修饰右侧元素,不存在针对vector的特殊规则,你可以把
vector<int>整体当成和int一样的普通类型来推导写法。
1. 约束指针本身为const(不可修改指向)
要修饰指针本身,需要把const放在*的右侧,声明写法如下:
void my_func (vector<int>* const arr)
- 禁止操作:
arr = &other_vec这类修改指针指向的语句会编译报错 - 允许操作:通过指针修改vector内部元素是合法的,例如
(*arr)[0] = 10不会报错
2. 约束vector元素为const(不可修改内部内容)
要修饰指针指向的vector对象本身,需要把const放在*的左侧,以下两种写法完全等价:
// 写法1(更常用) void my_func (const vector<int>* arr) // 写法2 void my_func (vector<int> const * arr)
- 禁止操作:修改vector内部元素的语句会编译报错,例如
(*arr)[0] = 10、arr->push_back(20)均不合法 - 允许操作:修改指针本身的指向是合法的,例如
arr = &other_vec不会报错
额外扩展:同时满足两种约束
如果既不允许修改指针指向,也不允许修改vector内部元素,可以组合两种写法:
void my_func (const vector<int>* const arr)
内容的提问来源于stack exchange,提问作者Algo
相关产品推荐
相关产品推荐

