c++ - 为什么在函数参数前添加 const 会报错?
问题描述
#include <vector>
#include<iostream>
using namespace std;
int* find( const vector<int> &vec, int value)
{
for (int ix = 0; ix < vec.size(); ix ++)
if (vec[ix] == value)
return &vec[ix];
return 0;
}
int main()
{
vector<int> a = {1, 2, 3, 4, 5};
cout << find(a, 3);
return 0;
}
[Running] cd "f:\CPP\VS_Code\" && g++ ch3.cpp -o ch3 && "f:\CPP\VS_Code\"ch3
ch3.cpp: In function 'int* find(const std::vector<int>&, int)':
ch3.cpp:9:20: error: invalid conversion from 'const value_type*' {aka 'const int*'} to 'int*' [-fpermissive]
return &vec[ix];
解决方案
错误是特定的,并将您指向返回行
return &vec[ix];
声称您正在将 a 更改'const value_type*'
为int*
。您现在必须考虑正在发生的事情:
- 您正在将地址返回到向量的元素,该元素现在标记为
const
。所以它是一个指向const
值类型的指针。 - 另一方面,该函数返回一个
int*
,因此,如果允许,您可以获取返回值(常量)并将其放入一个常规的int*
. 这意味着您现在可以更改此元素,从而失去const
矢量的性质。
简而言之 - 您需要返回 a const int*
,并且您只能在const
此函数中使用指针。
附带说明 - 可能没有理由使用指针。
推荐阅读
- winapi - 用于 WIN32 同步调用的 ETW 提供程序
- java - Mongoose 找到键中有一个点的嵌套对象
- java - 为第一个空的 int 赋值
- python - 使用 Python 将大型 zip 文件上传到网站
- python - pylint-单例比较-目的是什么?
- php - 编写 PHP 模板编译器的两个问题
- javascript - 如何在 fullcallendar 中显示 timeGrid 的更多按钮
- react-native - React Navigation v5 使用自定义标头
- c# - 如果它在列表中,我如何获取子实体的名称?
- .net - 将用户数据用户数据锁定在同一个id授权后面