函数中的c ++ - "引用的错误...不能用值"来初始化。

时间:2015-03-24 16:27:25

标签: c++ reference const

在花费大量时间挖掘相关帖子/在线资源后,我仍然对我的问题感到困惑。 我的示例代码(test.cc)是:


void testsub(const int* &xx );
int main ()
{
 int* xx;
 xx= new int [10];
 testsub(xx);
 }
 void testsub(const int* & xx){}

编译错误消息(pgcpp)读取

"test.cc", line 7: error: a reference of type "const int *&" (not const-qualified)
cannot be initialized with a value of type "int *"
  testsub(xx);
          ^
1 error detected in the compilation of "test.cc"."

为什么呢?非常感谢您的帮助。 最好的祝愿, 汀

4 个答案:

答案 0 :(得分:5)

如果参数类型为int*,则不能使用

const int* &

说你有:

const int a = 10;

void foo(const int* & ip)
{
   ip = &a;
}

int main()
{
   int* ip = NULL;
   foo(ip);
   *ip = 20;  // If this were allowed, you will be able to
              // indirectly modify the value of "a", which 
              // is not good.
}

答案 1 :(得分:3)

如错误消息所示,参数类型不兼容;当你提供指向const int的指针时,函数需要指向int的指针。

如果你问为什么那不相容:允许你破坏const正确性,如下例所示:

void testsub(const int* &xx ) {
    static const int x;
    xx = &x;
}

int* xx;
testsub(xx);  // Shouldn't be allowed, because...
*xx = 666;    // BOOM! modifying a constant object.

答案 2 :(得分:1)

也许试试这个

void testsub(const int* xx );
int main ()
{
    int xx [10];
    testsub(xx);
}
void testsub(const int* xx){}

您不需要&,因为您正在传递指针作为参数。

答案 3 :(得分:1)

转发" C-Array" (你的int [10]),你将在你的函数中有一个指向这个数组的第一个元素的指针。

void testsub(const int* xx );
int main ()
{
 int* xx;
 xx= new int [10];
 testsub(xx);
 }
 void testsub(const int* xx){}

我觉得你对你的书感到困惑,因为他们总是写一些类似于"通过参考调用"。这并不意味着将参数作为参考传递给&amp ;. 通常,将数组的大小传递给函数也很有用......所以它希望:

void testsub(const int* xx, size_t arraySize);
int main ()
{
 int* xx;
 xx= new int [10];
 testsub(xx, 10);
 }
 void testsub(const int* xx, size_t arraySize){}

现在,您可以访问函数中的数组,如果要使用索引访问数组,则可以检查索引。

void testsub(int* xx, size_t arraySize)
{
  for(size_t i=0; i<arraySize; ++i)
  //                    ^ this way you will never try to access
  //                      memory, which does not belong to the array
  //                      => no seg fault, or whatever happens
  {
    // do sth. with the array ... for example setting values to 0
    xx[i] = 0;
  }
}