函数调用时是否发生左值到右值的转换?

2023-12-15

考虑下面的代码:

#include <iostream>
int func(){
   int a = 0;
   return a;
}
int main(){
   int result = func();
}

根据cpp标准,关于return语句的一些规则是:

  1. 函数通过 return 语句返回到其调用者。
  2. [...] return 语句初始化(显式或隐式)函数调用的泛左值结果或纯右值结果对象复制初始化来自operand

因此,调用int result = func();,就好像它可以翻译成:

//a fiction code
func(){
   int a = 0;
   int result = a; #1
}

Because a是一个泛左值,应该将其转换为纯右值以进行纯右值评估(初始化对象)。所以我的问题是,在调用时int result = func();在体内func,左值a作为操作数return,需要转换为纯右值吗?


Yes a作为初始化结果对象的一部分,进行左值到右值的转换。 (通俗地说,这意味着存储在名为a被检索)。

参见[dcl.init]/17.8:

否则,正在初始化的对象的初始值是初始化表达式的(可能已转换)值。如有必要,将使用标准转换(第 7 条)将初始值设定项表达式转换为目标类型的 cv 未限定版本;不考虑用户定义的转换。

第 7 条包括左值到右值的转换。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

函数调用时是否发生左值到右值的转换? 的相关文章

  • 删除文件的最后 10 个字符

    我想删除文件的最后 10 个字符 说一个字符串 hello i am a c learner 是文件内的数据 我只是希望该文件是 hello i am a 文件的最后 10 个字符 即字符串 c learner 应在文件内消除 解决方案 将
  • WPF DataGrid 多选

    我读过几篇关于这个主题的文章 但很多都是来自 VS 或框架的早期版本 我想做的是从 dataGrid 中选择多行并将这些行返回到绑定的可观察集合中 我尝试创建一个属性 类型 并将其添加到可观察集合中 它适用于单个记录 但代码永远不会触发多个
  • 如何将 std::string& 转换为 C# 引用字符串

    我正在尝试将 C 函数转换为std string参考C 我的 API 如下所示 void GetStringDemo std string str 理想情况下 我希望在 C 中看到类似的东西 void GetStringDemoWrap r
  • 没有特殊字符的密码验证器

    我是 RegEx 的新手 已经进行了大量搜索 但没有找到任何具体内容 我正在编写一个验证密码字符串的正则表达式 可接受的字符串必须至少具有 4 种字符类型中的 3 种 数字 小写字母 大写字母 特殊字符 我对包含有一个想法 也就是说 如果这
  • 根据属性的类型使用文本框或复选框

    如果我有这样的结构 public class Parent public string Name get set public List
  • 在一个数据访问层中处理多个连接字符串

    我有一个有趣的困境 我目前有一个数据访问层 它必须与多个域一起使用 并且每个域都有多个数据库存储库 具体取决于所调用的存储过程 目前 我只需使用 SWITCH 语句来确定应用程序正在运行的计算机 并从 Web config 返回适当的连接字
  • 类型中的属性名称必须是唯一的

    我正在使用 Entity Framework 5 并且有以下实体 public class User public Int32 Id get set public String Username get set public virtual
  • 机器Epsilon精度差异

    我正在尝试计算 C 中双精度数和浮点数的机器 epsilon 值 作为学校作业的一部分 我在 Windows 7 64 位中使用 Cygwin 代码如下 include
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象
  • -webkit-box-shadow 与 QtWebKit 模糊?

    当时有什么方法可以实现 webkit box shadow 的工作模糊吗 看完这篇评论错误报告 https bugs webkit org show bug cgi id 23291 我认识到这仍然是一个问题 尽管错误报告被标记为RESOL
  • 用于 FTP 的文件系统观察器

    我怎样才能实现FileSystemWatcherFTP 位置 在 C 中 这个想法是 每当 FTP 位置添加任何内容时 我都希望将其复制到我的本地计算机 任何想法都会有所帮助 这是我之前问题的后续使用 NET 进行选择性 FTP 下载 ht
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • 使用 C# 中的 CsvHelper 将不同文化的 csv 解析为十进制

    C 中 CsvHelper 解析小数的问题 我创建了一个从 byte 而不是文件获取 csv 文件的类 并且它工作正常 public static List
  • 如何获取 EF 中与组合(键/值)列表匹配的记录?

    我有一个数据库表 其中包含每个用户 年份组合的记录 如何使用 EF 和用户 ID 年份组合列表从数据库获取数据 组合示例 UserId Year 1 2015 1 2016 1 2018 12 2016 12 2019 3 2015 91
  • 为什么 C# 2.0 之后没有 ISO 或 ECMA 标准化?

    我已经开始学习 C 并正在寻找标准规范 但发现大于 2 0 的 C 版本并未由 ISO 或 ECMA 标准化 或者是我从 Wikipedia 收集到的 这有什么原因吗 因为编写 审查 验证 发布 处理反馈 修订 重新发布等复杂的规范文档需要
  • 复制目录下所有文件

    如何将一个目录中的所有内容复制到另一个目录而不循环遍历每个文件 你不能 两者都不Directory http msdn microsoft com en us library system io directory aspx nor Dir
  • 如何在 Linq to SQL 中使用distinct 和 group by

    我正在尝试将以下 sql 转换为 Linq 2 SQL select groupId count distinct userId from processroundissueinstance group by groupId 这是我的代码
  • 有没有办法让 doxygen 自动处理未记录的 C 代码?

    通常它会忽略未记录的 C 文件 但我想测试 Callgraph 功能 例如 您知道在不更改 C 文件的情况下解决此问题的方法吗 设置变量EXTRACT ALL YES在你的 Doxyfile 中
  • 指针和内存范围

    我已经用 C 语言编程有一段时间了 但对 C 语言还是很陌生 有时我对 C 处理内存的方式感到困惑 考虑以下有效的 C 代码片段 const char string void where is this pointer variable l
  • 现代编译器是否优化乘以 1 和 -1

    如果我写 template

随机推荐

  • 如何从PictureBox中获取真实图像像素点x,y

    我有一个pictureBox2并且它被设置为zoom 我试图找出如何获得图像上真实的 x y 像素位置Mouse Click on pictureBox2 但我尝试了我所知道的 3 种可能的想法 不带 带PointToClient Poin
  • Android 中的全局计时器

    我想制作一个计时器 它将显示在我的应用程序的每个活动中 我知道如何在活动上设置计时器 下面是我的代码 public class Timer extends Activity implements OnClickListener public
  • 德摩根定律和 C++

    对于以下每个表达式 编写等效的 C 表达式 不带任何一元否定运算符 仍然允许 使用德摩根定律 P Q P Q P Q P Q For x 5 x 7 x lt 5 x gt 7 a gt 3 b gt 4 c 5 我的回答 x gt 5 x
  • Flutter:我想在下拉颤动下显示下拉列表

    我想创建看起来像我提到的下拉菜单 但我无法实现我的方面结果 我尝试使用渲染框来制作自定义下拉菜单 但它希望感觉像实际的下拉菜单 谁能帮助我得到这种类型的结果 我想要这样的结果 我当前的用户界面如下所示 这是我的代码 class AppDro
  • 在 rCharts/slidify/nvd3 中设置图表区域背景颜色

    对于以下滑动甲板 title Foo framework revealjs io2012 html5slides shower dzslides revealjs theme solarized highlighter highlight
  • 如何在 ASP.NET Identity 中使用 ASP.NET 会员数据库?

    我有几个旧版 ASP NET Web 应用程序共享 ASP NET 成员资格数据库 我想迁移到利用 NET Core 和 IdentityServer4 的微服务架构 并在新的微服务生态系统中拥有身份服务器以使用现有的 ASP NET 会员
  • Azure PowerShell:启用应用程序诊断和站点诊断

    我正在为 Azure 网站配置诊断和 IIS 日志 Azure 管理门户显示将应用程序诊断存储到 Azure 表存储的选项 单击 管理表存储 时会弹出一个对话框以提供 Azure 表详细信息 Blob 存储的站点诊断 我正在搜索 Azure
  • 创建同步 http.get()

    我试图通过 Promise 和 http get 处理登录 但我失败得很厉害 我收到以下错误 对象不支持属性或方法 toPromise 我的代码是 return this http get http localhost 5000 login
  • 强制 ANTLR 在特定文件夹中生成输出文件

    我不喜欢将 ANTLR 生成的文件放在与我的文件相同的位置 g4语法和其他版本控制文档 我想将所有生成的文件放在一个单独的嵌套文件夹中 可以通过排除 gitignore 到目前为止我尝试过的是创建一个文件夹
  • 为什么 FB.XFBML.parse() 不渲染我的插件?

    My code a href Render me a div div render me click function e e preventDefault social facebook html
  • Android Studio:用于编码 UTF-8 的不可映射字符

    将我的项目从 eclipse 导入 android studio 后 出现以下错误 Error unmappable character for encoding UTF 8 安卓工作室 0 5 8 我遇到了同样的问题 因为存在带有 win
  • AVX2 中的条件指令

    您能给出 AVX2 中可用的条件指令列表吗 到目前为止 我发现了以下内容 mm256 blendv 可供选择a and b基于掩码c 是否有条件乘法和条件加法等 另外 如果接受指示imm8计数 比如 mm256 blend 你能解释一下如何
  • 特定属性的 SequenceEqual

    我想比较两个对象列表 这些对象有四种不同的属性 我只需要比较其中的三个作为序列 只有三个 因为其中一个总是不同的 示例如下 list1 new List
  • DEI原则下Ctor参数应该注入什么?

    我试图了解哪些对象应该注入到对象中 哪些对象应该在内部创建 如果我有一些List
  • 加密文件时减少内存消耗 C#

    我的加密应用程序使用了大量内存 它根本无法处理大文件 如何优化我的代码来处理大文件 我正在使用下面的代码将文件转换为 base64 显着增加文件大小 Console Write Enter File Path docPath Console
  • XmlSerializer:“在此上下文中不能使用类型‘Type’”

    我试图找出如何使用序列化任何类Xml序列化器 不使用Xml包含属性 通常可以工作 但使用以下代码时出现异常 using System using System Collections using System Collections Gen
  • 如何将修改后的提交推送到远程 Git 存储库?

    当我对源代码进行一些处理后 我做了我通常做的事情提交 然后推送到远程存储库 但后来我注意到我忘记在源代码中组织我的导入 所以我执行修改命令来替换之前的提交 gt git commit amend 不幸的是 提交无法被推回存储库 被拒绝是这样
  • 如何从 JSONArray 解析 JSON 对象?

    我有一个非常大的 JSON 文件 格式如下 fullname name1 id 123 fullname name2 id 245 fullname name3 id 256 它看起来像一个 JSONArray 所有记录都写在同一行中 你能
  • Java并发——使用哪种技术来实现安全?

    我有一个 personId 列表 有两个 API 调用可以更新它 添加和删除 public void add String newPersonName if personNameIdMap get newPersonName null my
  • 函数调用时是否发生左值到右值的转换?

    考虑下面的代码 include