非常量的引用左值问题

时间:2022-07-26
本文章向大家介绍非常量的引用左值问题,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

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

让我们聚焦到出错代码段

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;
}

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

Sqlist LA,LB,LC;
if(!Initial(&LA)||!Initial(&LB)||!Initial(&LC))return error;

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

error: invalid initialization of non-const reference of type 'Sqlist*&' from an rvalue of type 'Sqlist*'

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

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

再举个例子

void fun(string& i)
{
    cout << i;
}

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

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

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