error: invalid initialization of non-const reference of type ‘int‘ from an rvalue of type ‘int‘

2024-04-12 01:38

本文主要是介绍error: invalid initialization of non-const reference of type ‘int‘ from an rvalue of type ‘int‘,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

先看代码

#include<iostream>
int output(int &a)
{return a;
}
int test()
{int a(10);return a;
}int main()
{std::cout << output(test()) << std::endl;
}

这段代码报了个error

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

然而把int output(int &a)改为int output(const int &a)却能通过编译并有输出

分析原因

前者与后者的区别就是在引用上了,test函数的返回值其实是作为一个临时值返回的,而output的声明中,参数是int&,不是常量引用。因为c++编译器的一个关于语义的限制。如果一个参数是以非const引用传入,c++编译器就有理由认为程序员会在函数中修改这个值,并且这个被修改的引用在函数返回后要发挥作用。但如果你把一个临时值当作非const引用参数传进来,由于临时值的特殊性,程序员并不能操作临时值,而且临时值随时可能被释放掉,所以,一般说来,修改一个临时值是毫无意义的,据此,c++编译器加入了临时值不能作为非const引用的这个语义限制。

总结

总的来说,临时值不能作为非常量引用参数进行传递

引用虽好,可不要乱传递哦


修改方案

方案一:

#include<iostream>
int output(int a) //不进行引用传递
{return a;
}
int test()
{int a(10);return a;
}int main()
{std::cout << output(test()) << std::endl;
}

方案二:

#include<iostream>
int output(int& a)
{return a;
}
int test()
{int a(10);return a;
}int main()
{int temp = test(); //将test的临时返回值由temp来接收,这样就把值的内容保存起来了std::cout << output(temp) << std::endl;
}

方案三:

#include<iostream>
int output(const int &a) // 将临时值作为常量引用传递,这样就不能进行修改
{return a;
}
int test()
{int a(10);return a;
}int main()
{std::cout << output(test()) << std::endl;
}

引申

编译错误:int &x=10;编译正确:const int &x=10;//10在这里是临时值

(67条消息) error: invalid initialization of non-const reference of type 'int&' from an rvalue of type 'int'_南极墨白的博客-CSDN博客

这篇关于error: invalid initialization of non-const reference of type ‘int‘ from an rvalue of type ‘int‘的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/895755

相关文章

c++的初始化列表与const成员

初始化列表与const成员 const成员 使用const修饰的类、结构、联合的成员变量,在类对象创建完成前一定要初始化。 不能在构造函数中初始化const成员,因为执行构造函数时,类对象已经创建完成,只有类对象创建完成才能调用成员函数,构造函数虽然特殊但也是成员函数。 在定义const成员时进行初始化,该语法只有在C11语法标准下才支持。 初始化列表 在构造函数小括号后面,主要用于给

Oracle type (自定义类型的使用)

oracle - type   type定义: oracle中自定义数据类型 oracle中有基本的数据类型,如number,varchar2,date,numeric,float....但有时候我们需要特殊的格式, 如将name定义为(firstname,lastname)的形式,我们想把这个作为一个表的一列看待,这时候就要我们自己定义一个数据类型 格式 :create or repla

深入理解PHP7之REFERENCE

REFERENCE 上一章说过引用(REFERENCE)在PHP5的时候是一个标志位, 而在PHP7以后我们把它变成了一种新的类型:IS_REFERNCE. 然而引用是一种很常见的应用, 所以这个变化带来了很多的变化, 也给我们在做PHP7开发的时候, 因为有的时候疏忽忘了处理这个类型, 而带来不少的bug. 最简单的情况, 就是在处理各种类型的时候, 从此以后我们要多考虑这种新的类型, 比如

Caused by: org.hibernate.MappingException: Could not determine type for: org.cgh.ssh.pojo.GoodsType,

MappingException:这个主要是类映射上的异常,Could not determine type for: org.cgh.ssh.pojo.GoodsType,这句话表示GoodsType这个类没有被映射到

编译linux内核出现 arm-eabi-gcc: error: : No such file or directory

external/e2fsprogs/lib/ext2fs/tdb.c:673:29: warning: comparison between : In function 'max2165_set_params': -。。。。。。。。。。。。。。。。。。 。。。。。。。。。。。。。 。。。。。。。。 host asm: libdvm <= dalvik/vm/mterp/out/Inte

收藏:解决 pip install 出现 error: subprocess-exited-with-error 错误的方法

在使用 pip 安装 Python 包时,有时候会遇到 error: subprocess-exited-with-error 错误。这种错误通常是由于 setuptools 版本问题引起的。本文将介绍如何解决这一问题 当你使用 pip install 安装某个 Python 包时,如果 setuptools 版本过高或过低,可能会导致安装过程出错,并出现类似以下错误信息:error: subpr

Nn criterions don’t compute the gradient w.r.t. targets error「pytorch」 (debug笔记)

Nn criterions don’t compute the gradient w.r.t. targets error「pytorch」 ##一、 缘由及解决方法 把这个pytorch-ddpg|github搬到jupyter notebook上运行时,出现错误Nn criterions don’t compute the gradient w.r.t. targets error。注:我用

src/pyaudio/device_api.c:9:10: fatal error: portaudio.h: 没有那个文件或目录

(venv) shgbitai@shgbitai-C9X299-PGF:~/pythonworkspace/ai-accompany$ pip install pyaudio sounddeviceCollecting pyaudioDownloading PyAudio-0.2.14.tar.gz (47 kB)━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

ERROR 2003 (HY000): Can't connect to MySQL server on (10061)

在linux系统上装了一个mysql-5.5,启动后本机都是可以访问的,操作都正常,同时建了一个%的用户(支持远程访问), root@debian:/# mysql -u loongson -pEnter password: Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id

pip install pyaudio sounddevice error: externally-managed-environment

shgbitai@shgbitai-C9X299-PGF:~/pythonworkspace/ai-accompany$ pip install pyaudio sounddeviceerror: externally-managed-environment× This environment is externally managed╰─> To install Python package