0

我是 C++ 新手,并尝试在“Essential C++”一书中使用一些示例。当我从书中编写这段代码时:

int *find(const vector<int> &vec, int value) { ... }

g++ 编译器给了我一个错误:

error: invalid conversion from 'const int*' to 'int *' [-fpermissive]

我尝试将其更改为

const int *find(const vector<int> &vec, int value)

它工作正常。

所以我只是想知道这有什么详细的原因吗?谢谢!

这是书中的代码:

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;
}
4

2 回答 2

1

我猜你正在做类似的事情

int *find(const vector<int> &vec, int value) 
{ 
  ... 
  return &vec[someIndex];
}

你不能这样做,因为你正在传递const对向量的引用。因此需要返回const int*

你真正应该做的是使用std::find.

vector<int>::const_iterator i = std::find(vec.begin(), vec.end(), value);

// check if an element was found and print it out
if (i != vec.end()) std::cout << *i << std::endl;

这具有额外的优势,即当向量中未找到值时,它不会产生未定义的行为。

于 2013-06-13T16:08:44.230 回答
0

返回的值很可能find()const,但您的函数定义指定返回类型不是const

您不能将非const变量更改为const

Aconst int*是指向不可更改的int. 由于该函数返回一个int*,处理该函数返回值的代码将能够更改所指向的整数的值。如果您尝试返回 type 的东西const int*,那么这将允许您更改一个不可更改的整数 - 因此编译器会抱怨。

于 2013-06-13T16:07:52.497 回答