qq_43412960
2020-01-02 17:26
采纳率: 79.1%
浏览 194

这是一个关于C语言引用的问题

我想测试引用的用法,敲了以下代码


int main()
{

/*List tou;
InitList(tou);
List shou;
InitList(shou);
*/
int &a=1;

int b=2;
int &c=b;

getch();


return 0;
}

编译后出现下面错误

--------------------Configuration: 线性表 - Win32 Debug--------------------
Compiling...
线性表.cpp
E:\数据结构\线性表.cpp(46) : error C2440: 'initializing' : cannot convert from 'const int' to 'int &'
A reference that is not to 'const' cannot be bound to a non-lvalue
Error executing cl.exe.

线性表.exe - 1 error(s), 0 warning(s)
我感觉非常奇怪的,首先这个转换错误出现一次,证明只有一次赋值出错。根据以往经验,我判断是&a=1出错。出错原因就是整型变量转化成引用整型,不合法。
&c=b也是整型变量转化成引用变量,为啥就合法了呢?

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

6条回答 默认 最新

  • bostonAlen 2020-01-02 22:05
    已采纳

    其实我认为没必要纠结,其实在c++开发中用到引用最多的地方是作为函数参数,引用作为函数参数,此时形参就是实参,或者作为函数返回值,总体而言都是少了对象的拷贝,增加了效率。

    已采纳该答案
    打赏 评论
  • bobhuang 2020-01-02 17:34

    int &a=1;是常数转换成整型变量的引用,所以不行。而&c=b中,b是一个变量,所以可以引用。

    打赏 评论
  • J4cks0n 2020-01-02 17:36

    建议看下引用的定义奥,还以往经验

    它是某个已存在变量的另一个名字

    打赏 评论
  • huhuren12 2020-01-02 17:36

    引用作为变量的别名而存在,不能直接赋值常量,int &c=b;表示c就代替b了,只是换了个名字而已,以后你用c就等于用b,你int &a=1;啥意思?编译器不知道a应该代替谁了,肯定会出错

    打赏 评论
  • 吧小狸 2020-01-02 18:20

    为什么我的连&c=b都不能运行,运行出错

    打赏 评论
  • 502203305 2020-01-02 18:28

    了解一下引用,常引用?简单的说一下。

    int &c= b; 这种是普通类型的引用,引用类型匹配。
    int &a=1;  这种事对常量进行引用,本质会创建一个临时的变量1,但是这个临时变量的声明周期极短,而你后面还是用,肯定失败。可以通过
    在前面加const的形式来延长临时变量的声明周期。
    建议看一看c++ primer这本书。引用部分。
    
    打赏 评论

相关推荐 更多相似问题