sho*_*ace 1 c++ pass-by-reference
我试图解决这个问题,我必须拼写数字。
当我尝试a通过引用调用我的字符串数组时,出现此错误。但是如果我按值调用它,我不会出错。
我不知道 rvalue 来自哪里,因为我的字符串元素应该被视为左值。
#include <iostream>
#include <string>
using namespace std;
void spell(int n,string* &a){
if(n==0)
return;
spell(n/10,a);
cout<<a[n%10];
}
int main(){
int n;
cin>>n;
string a[10]{"zero ","one ","two ","three ","four ","five ","six ","seven ","eight ","nine "};
spell(n,a);
if(n<0)
return 0;
return main();
}
Run Code Online (Sandbox Code Playgroud)
首先,调用main()是非法的,因此return main();是不确定的行为。do..while如果您想main()多次运行的代码,请改用循环。
当string[]数组衰减为string*指向第一个元素的指针时,编译器抱怨的右值出现spell()。您的声明a是一个非常量左值引用,它不能绑定到右值,因此编译器错误。
spell()不会修改a自身以指向其他地方,它只是访问指向string的数组中的对象a,因此不需要a通过引用传递,通过值传递它就可以了:
void spell(int n, string* a)
或者,通过const引用传递它也可以工作,因为 const 左值引用可以绑定到右值:
void spell(int n, string* const &a)
| 归档时间: |
|
| 查看次数: |
98 次 |
| 最近记录: |