首页 / 知识
关于c ++:通过引用函数传递新构造的对象是否合法?
2023-04-16 15:48:00

Is it legal to pass a newly constructed object by reference to a function?具体来说,以下是合法的C ++吗?
它似乎可以正常工作,但这并不意味着它一定合法。 是吗?
编辑-将 1:不允许使用临时地址。 Visual C ++允许它作为语言扩展(默认情况下,语言扩展处于启用状态)。 2:这是完全合法的。 不,将非常量引用传递给临时对象是违反标准的。您可以使用const引用:
因此,尽管有些编译器会接受它,并且只要不使用分号后的内存,它就可以工作,而合规的编译器将不会接受它。 在完全符合标准的C ++中不允许foo,而bar可以。尽管有机会,但foo会带有警告编译,而bar也可能会或可能不会带有警告编译。 A()创建一个临时对象,除非绑定到引用(如bar所示)或用于初始化命名对象,否则它将在创建该对象的完整表达式的末尾销毁。为保存参考初始化程序而创建的临时目录将一直保留到其参考范围的末尾。对于bar来说,这就是函数调用,因此您可以完美安全地使用A内部bar。禁止将临时对象(是右值)绑定到非常量引用。同样,也禁止使用右值的地址(作为参数传递以初始化foo的A)。 简短的回答是。
如果通过函数将对象作为const引用参数接收-如已修改
全表达式是不是另一个表达式的子表达式的表达式。 那些A对象将仅存在,直到执行到达分号为止。因此,调用是安全的,但不要尝试保存指针并在以后使用它。另外,编译器可能要求bar接受const引用。 看起来它可能会起作用,但是它没有使用带有Wall选项的g ++进行编译,这是我得到的:
看起来您将需要使用常量引用。 对于// 2,您需要一个const引用 对于/ / 1我认为这是合法的,但没用 是合法的我们有时会使用它来提供一个我们可能要忽略的默认值。
在上述情况下,如果没有 完全合法。 该对象将在函数调用期间存在于堆栈中,就像其他任何局部变量一样。 |
最新内容
相关内容
linux命令引用文件名?
linux命令引用文件名?,工作,系统,信息,命令,数据,文件,时间,灵活,名称,标准,linux下按文件名和文件内容查找文件1、按名称查找文件你可以借助linux调用函数的命令?
linux调用函数的命令?,系统,代码,策略,上调,时间,设计,通信,网络,设备,项目,如何在Linux内核里增加一个系统调用?在一个进程中创建3个线程,名字linux命令和库函数?
linux命令和库函数?,系统,标准,管理,地址,服务,库函数,环境,平台,第一,状态,1.linux系统调用和库函数调用的区别系统调用和库函数在执行的效果linux查看函数命令?
linux查看函数命令?,系统,信息,名称,命令,位置,情况,公用,名字,标准,资料,linux下有没有像查看函数那样直接使用man命令来查看结构体的命令?这linux无效对象的命令?
linux无效对象的命令?,软件,系统,单位,网络,管理,术语,检测,电脑,环境,风险,linux疑问:普通用户的ifconfig命令无法执行,如何解决?建议这个操调用函数命令linux?
调用函数命令linux?,系统,管理,网络,通用,统一,观察,地址,代码,设备,地方,怎么调用system函数,使用Android的linux命令1、int system(const chlinux查询函数命令?
linux查询函数命令?,系统,信息,名称,标准,函数,百度,代码,名字,最新,实时,Linux下查找一个函数在哪个库文件中1、默认状态下,gcc并不搜索数学库深入理解python函数传参机制
深入理解python函数传参机制,培训,对象,函数,变量,类型,复本,下面,操作,机制,内存,首先需要申明的一点是,python里是没有像C和C++里那样按值传Python中的匿名函数lambda
Python中的匿名函数lambda,代码,地方,名字,主体,名称,培训,函数,表达式,赋值,语句,简述除了def语句之外,Python还提供了一种生成函数对象的表Python有哪些常用函数?
Python有哪些常用函数?,数据,函数,地址,数字,培训,工作,网络,位置,字符串,字符,Python常用函数有哪些?我想大家都比较好奇这个问题,今天小编特pythonPandas Series对象有哪些属
pythonPandas Series对象有哪些属性?,工具,数据,数字,分析,培训,属性,数据类型,数组,对象,索引,想必大家都知道pandas,它是基于Numpy的一种工具python是面向对象还是面向过程的
python是面向对象还是面向过程的,数据,代码,基础,形态,培训,术语,设计,对象,过程,语言,Python虽然是解释型语言,但从设计之初就已经是一门面向