C++ 为什么在函数参数前面添加常量会产生错误? #包括 #包括 使用名称空间std; int*find(常量向量和向量,int值) { 对于(intix=0;ix类型'*/c> > < int *>代码> .你必须考虑现在发生的事情: 您正在返回向量元素的地址,该元素现在标记为const。因此它是指向const值类型的指针 另一方面,函数返回一个int*,因此如果允许的话,您可以获取返回值(常量值)并将其放入常规int*。这意味着您现在可以更改此元素,从而失去向量的常量
错误是特定的,并将您指向返回线C++ 为什么在函数参数前面添加常量会产生错误? #包括 #包括 使用名称空间std; int*find(常量向量和向量,int值) { 对于(intix=0;ix类型'*/c> > < int *>代码> .你必须考虑现在发生的事情: 您正在返回向量元素的地址,该元素现在标记为const。因此它是指向const值类型的指针 另一方面,函数返回一个int*,因此如果允许的话,您可以获取返回值(常量值)并将其放入常规int*。这意味着您现在可以更改此元素,从而失去向量的常量,c++,C++,错误是特定的,并将您指向返回线 [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*' {a
[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> > < <代码> int *>代码> .你必须考虑现在发生的事情:
const
。因此它是指向const
值类型的指针int*
,因此如果允许的话,您可以获取返回值(常量值)并将其放入常规int*
。这意味着您现在可以更改此元素,从而失去向量的常量
const int*
,并且只允许在该函数中使用const
指针
旁注-可能没有理由使用指针。错误是因为现在返回的值是
常量值类型*
,而在代码中您提到的返回类型是int*
如果更改了参数类型,还应更改返回类型,如下所示:
return &vec[ix];
const int*find(const vector&vec,int value){..}
const vector vec表示向量“vec”的内容无法更改。当您试图将&vec[i]返回int*时,您的意思是希望将类型const int*转换为类型int*
下面是一些有关const_cast的内容,可能会有所帮助!下面的查找函数将取代当前的查找功能
const int* find( const vector<int> &vec, int value){....}
或者只需要知道它存在?然后将find的返回类型更改为bool并返回如下
return ix;
错误很明显。向量是常量,因此无法返回指向其所包含数据的非常量指针。为什么函数返回指针?从您使用函数的方式判断,这可能不是您想要的。
std::vector
和其他STL容器通常在指针上使用称为迭代器的东西,例如引用向量中的对象。algorithms标题下提供的函数可以做到这一点。const\u cast
应谨慎使用……在这种情况下使用这是一种危险的解决方法。
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;
}
return ix;
return vec[ix] == value;