前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >非常量的引用左值问题

非常量的引用左值问题

作者头像
glm233
发布2020-09-28 10:49:53
1.1K0
发布2020-09-28 10:49:53
举报
文章被收录于专栏:glm的全栈学习之路

今日,我在写数据结构作业时,编写的程序中出现了这样一段报错,有点懵的我遍历四方博客终于发现了问题所在

让我们聚焦到出错代码段

代码语言:javascript
复制
inline bool Initial(List &q)
{
    q->data=(ll*)malloc(sizeof(ll)*Maxsize);
    q->length=Maxsize;
    for(rg i=0;i<Maxsize;i++)
    {
       scanf("%lld",&q->data[i]);
        //cout<<q->data[i]<<endl;
    }
    return ok;
}

很明显这是一个典型的顺序表的初始化,我在主函数中这样调用

代码语言:javascript
复制
Sqlist LA,LB,LC;
if(!Initial(&LA)||!Initial(&LB)||!Initial(&LC))return error;

编译器出现了这样一段报错

代码语言:javascript
复制
error: invalid initialization of non-const reference of type 'Sqlist*&' from an rvalue of type 'Sqlist*'

这就是我们所说的 非常量的引用必须是左值 问题

什么意思呢,具体而言就是我初始化三个顺序表,分别把它们的常地址传入,可是在定义函数处未加const关键字导致编译错误

再举个例子

代码语言:javascript
复制
void fun(string& i)
{
    cout << i;
}

int main()
{
    fun("hello world!")
    return 0;
}

这种情况和我之前出现的错误大同小异,常字符串的引入与函数参数定义的不匹配导致编译错误

C++中, 编译器规定:常量(右值量)不能作为非const引用,解决方案一律是加上const关键字

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/10/03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档