将unsigned int *'转换为'unsigned int *&

时间:2012-08-15 12:39:45

标签: c++

我有一个'unsigned int *&amp;争论 我想在代码中传输的参数位于std::vector<unsigned int> data 所以,我所做的是:我转移以下参数&amp; data [0] 但是得到编译错误:

unsigned int *' to 'unsigned int *&

什么可以解决? 谢谢,

4 个答案:

答案 0 :(得分:6)

&data[0]是一个右值,不能绑定到非const引用。

你可以这样做:

unsigned int *ptr = &data[0];
func(ptr);

但是,将函数的签名更改为

可能更好
void foo(unsigned int &val); //or any other return type

如果您想在其他位置创建指针点,则可以传递对指针的引用。但我认为没有理由这样做

答案 1 :(得分:3)

表达式&data[0]确实产生了一个r值,你的函数无法接受它。

如果您不想改变您的功能,请进行简单的解决方法(确保您了解需要参考的原因):

unsigned int* ptr = &data[0];
func(ptr);

答案 2 :(得分:1)

&amp; data [0]是一个rvalue,但函数参数类型是指针的非常量引用。非const引用不能绑定到右值。

在OP为他的问题提供更多背景之前,很难建议一个好的解决方法。

答案 3 :(得分:1)

unsigned int *argument = &data[0];
call_function(argument);

请注意,该函数可能希望更改argument的值,因此可能会要求您编写:

data.assign(argument, argument + new_length);