Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么在函数参数前面添加常量会产生错误? #包括 #包括 使用名称空间std; int*find(常量向量和向量,int值) { 对于(intix=0;ix类型'*/c> > < int *>代码> .你必须考虑现在发生的事情: 您正在返回向量元素的地址,该元素现在标记为const。因此它是指向const值类型的指针 另一方面,函数返回一个int*,因此如果允许的话,您可以获取返回值(常量值)并将其放入常规int*。这意味着您现在可以更改此元素,从而失去向量的常量_C++ - Fatal编程技术网

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;