首页 > 解决方案 > 为什么在函数参数前添加 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];

标签: c++

解决方案


错误是特定的,并将您指向返回行

return &vec[ix];

声称您正在将 a 更改'const value_type*'int*。您现在必须考虑正在发生的事情:

  1. 您正在将地址返回到向量的元素,该元素现在标记为const。所以它是一个指向const值类型的指针。
  2. 另一方面,该函数返回一个int*,因此,如果允许,您可以获取返回值(常量)并将其放入一个常规的int*. 这意味着您现在可以更改此元素,从而失去const矢量的性质。

简而言之 - 您需要返回 a const int*,并且您只能在const此函数中使用指针。

附带说明 - 可能没有理由使用指针。


推荐阅读