Daw*_*dPi 10 c++ pointers reference
简单来说,我有一个简单的指针:
int* a;
Run Code Online (Sandbox Code Playgroud)
现在,我想改变这个指针的值.我想在一个函数中这样做.函数确保它不会改变指针指向的对象,但会改变指针本身.这就是为什么我希望这个函数接受如下参数:非const引用(因为指针的值将被改变)到指向const对象的非const指针(指针本身可以改变)(函数保证,该对象,指针指向不会被改变).
最简单的功能是:
void function(const int*& a){
a = 0;
}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试调用此函数时:
int main(){
int* a;
function(a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译器不满意并说:
从'const int*'函数(a)的rvalue初始化'const int*&'类型的非const引用;
我不太明白这个错误,因为对我来说没有涉及rvalue(我传递对象的引用,已经存在于堆栈中.)
问题是,我该怎么做呢?
可以在此处找到示例:https://ideone.com/D45Cid
编辑:
有人建议,我的问题是为什么将"指向非const的指针"转换为"指向const的指针"是不合法的.
我的问题是不同的,因为我没有使用指针指针我只使用指向对象/值的指针并存储对它的引用,因此情况就像在回答这个问题:
const char c = 'c';
char* pc;
const char** pcc = &pc; // not allowed
*pcc = &c;
*pc = 'C'; // would allow to modify a const object
Run Code Online (Sandbox Code Playgroud)
在我的情况下是不可能的,因为我无法取消引用顶级指针(我没有这样的指针).
此外,我质疑这个问题的完美和干净的解决方案,这个问题没有涉及
我不太明白这个错误,因为对我来说没有涉及rvalue(我传递对象的引用,已经存在于堆栈中.)
int*并且const int*是不同的事情.当你传递a类型int*时function(const int*&),它需要const int*首先隐式地进行转换,这是临时的,即rvalue,并且不能绑定到非const引用.这就是编译器抱怨的原因.
问题是,我该怎么做呢?
您可以更改其类型a或参数类型function()以使它们完全匹配(可能是const int*您不会更改指针指向的值),以避免隐式转换和临时变量.或者@TartanLlama建议,返回指针的新值function().
| 归档时间: |
|
| 查看次数: |
1671 次 |
| 最近记录: |