通过引用传递匿名变量

2024-01-12

标准 C++ 类型(例如 int 或 char)具有构造函数,因此您可以使用如下表达式:

int a = int(67); // create anonymous variable and assing it to variable a
int b(13);       // initialize variable b
int(77);         // create anonymous variable

用户定义的类型(结构或类)能够执行相同的操作:

struct STRUCT
{
  STRUCT(int a){}
};

STRUCT c = STRUCT(67);
STRUCT d(13);
STRUCT(77);

问题是:为什么我们可以传递引用匿名结构或类实例,但不能传递标准类型?

struct STRUCT
{
  STRUCT(int a){}
};

void func1(int& i){}
void func2(STRUCT& s){}
void func3(int i){}
void func4(STRUCT s){}

void main()
{
  //func1(int(56));  // ERROR: C2664
  func2(STRUCT(65)); // OK: anonymous object is created then assigned to a reference
  func3(int(46));    // OK: anonymous int is created then assigned to a parameter
  func4(STRUCT(12)); // OK: anonymous object is created then assigned to a parameter
}

如果您的编译器允许这样做,那么它就不是标准兼容的 C++ 编译器。您不能将临时右值绑定到非常量左值引用。这是规则。两个都clang http://coliru.stacked-crooked.com/a/acfdf47d2edf574f and gcc http://coliru.stacked-crooked.com/a/73db08a665558e1b不要编译该代码func2(STRUCT(65));.

相反,你有其他选择:

void func1(int&& i){}

void func1(const int& i){}

C++03 的遗留问题:对非常量类型的(左值)引用 (int &i)应该能够更改参数,然后传递一个临时对象,例如56不合逻辑,因为它不可改变。对 const 类型的引用 (const int &i)应该只是将该值观察为只读,然后传递一个临时值,例如52是合法的。

在 C++11 中,您可以通过以下方式引用非常量临时对象:&&.

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

通过引用传递匿名变量 的相关文章

  • 将 C++ 代码(本机客户端)移植到浏览器(Web 应用程序)

    我有一个使用 Qt creator SDK 编写的 C 模块 我想将此代码移植到任何网页上运行 而不会对最终用户损害源代码 用户应该能够在任何浏览器 Chrome Firefox Safari Explorer 上看到此模块的输出 而无需安
  • strtok() 和空字段

    我正在将一些 C 结构序列化为字符串 然后将其反序列化strtok 但不幸的是 strtok 不检测空字段 例如 1 2 4 有没有替代功能 在linux上有strsep http www mkssoftware com docs man3
  • fork 和 exec 之间的区别

    两者有什么区别fork and exec 指某东西的用途fork and exec它体现了 UNIX 的精神 它提供了一种非常简单的方法来启动新进程 The fork调用基本上复制了当前进程 在almost任何方式 并非所有内容都会被复制
  • TCP客户端;网络流;异步读取; C#

    请原谅我对任务和异步缺乏了解 使用 TcpClient 类 我正在创建与可用服务器的连接 void async RunClientAsync TcpClient client new TcpClient try await client C
  • Web 应用程序框架:C++ 与 Python

    作为一名程序员 我熟悉 Python 和 C 我正在考虑编写自己的简单 Web 应用程序 并且想知道哪种语言更适合服务器端 Web 开发 我正在寻找一些东西 它必须是直观的 我认识到 Wt 存在并且它遵循 Qt 的模型 我讨厌 Qt 的一件
  • 找不到 HttpContextBase 命名空间

    public string GetCartId HttpContextBase context if context Session CartSessionKey null if string IsNullOrWhiteSpace cont
  • const_iterators 更快吗?

    我们的编码指南更喜欢const iterator 因为它们比正常的要快一点iterator 当您使用时 编译器似乎会优化代码const iterator 这真的正确吗 如果是的话 内部到底发生了什么使得const iterator快点 编辑
  • WCF 客户端返回空数组 - XML 响应似乎正常

    我正在尝试为我们的 Intranet 上托管的 Web 服务创建一个简单的 WCF 客户端 C 使用 Fiddler 和 SoapUI 我可以看到请求和响应似乎正常 但是当我运行代码时返回一个空数组 我会尝试只粘贴相关的行 但会是很多东西
  • dlopen 或 dlclose 未调用信号处理程序

    我在随机时间内收到分段错误 我注册了信号 但发生分段错误时未调用信号处理程序 include
  • 使用 INF 文件 C++ 以编程方式安装驱动程序

    这里有人可以告诉我如何安装第 3 方设备驱动程序吗 如果提供了所有必需的文件 即 inf 文件 sys 等 则以编程方式进行 这 该解决方案应运行的最低操作系统是Windows2000 我尝试复制 inf文件放入Win文件夹 INF文件夹和
  • 如何设置cookie值?

    我正在执行以下操作来设置 cookie 值 HttpCookie mycookie new HttpCookie mycookie mycookie Value value1 Case sensitivity mycookie Expire
  • 如何修改 edmx 的默认代码生成策略?

    我想修改默认的代码生成策略 该怎么做 我只是想修改类名 lt code Escape container gt to Entities并将默认连接字符串更改为name Default 我不想为该项目创建模板文件 我想编辑它以便它可以在全球范
  • 使用可变参数模板函数计算多个值的平均值

    我正在尝试编写一个函数来确定任意数量参数的平均值 所有参数都具有相同的类型 出于学习目的 我尝试使用可变参数模板函数来做到这一点 这是我到目前为止所拥有的 template
  • 我们可以使用 C# 录制发送到扬声器的声音吗

    我有一个软件 SoundTap Streaming Audio Recorder 它记录发送到扬声器的任何音频 无论流是来自网络还是来自某些文件或麦克风 我可以在桌面应用程序中制作这样的应用程序 以便我可以录制发送到扬声器的流 无论来源如何
  • 使用 System.Json 迭代 JSON

    我正在探索 NET 4 5 的功能System Json库 但没有太多文档 而且由于流行的 JSON NET 库 搜索起来相当棘手 我基本上想知道 我如何循环一些 JSON 例如 People Simon Age 25 Steve Age
  • 在 C++17 中编译具有非固定基础类型的 constexpr 从 int 静态转换为作用域枚举的未定义行为

    我想知道以下内容是否应该在 C 17 中编译 enum class E A B constexpr E x static cast
  • 定义一个断言,即使定义了 NDEBUG,该断言也有效

    我想定义一个assert与标准相同的宏assert 3 http man7 org linux man pages man3 assert 3 html调用 但它不会被预处理器删除NDEBUG被定义为 这样的呼唤 让我们称之为assert2
  • 在运行时将项目添加到 ToolStrip

    您好 我有一个带有 收藏夹 菜单的 ToolStripMenu 我想在运行时在 WinForms 应用程序中添加子项目 我有一个 datagridview 右键单击它会显示一个包含 添加到收藏夹 选项的上下文菜单 当该事件被触发时 我想使用
  • 具有两个表的谓词构建器

    A Party可以有一个或多个Contact对象 我想选择全部Parties谁的街道名称包含特定关键字 如果我只想搜索Party我可以使用下面的代码 但我如何扩展它来搜索Contact public IQueryable
  • 如何使用 __m128i 执行元素左移?

    我发现 SSE 移位指令只能在所有元素上移位相同的量 mm sll epi32 mm slli epi32 这些会移动所有元素 但移动量相同 http software intel com sites products documentat

随机推荐

  • 气流如何安装?

    我好像在做某事 错误的 https pythonhosted org airflow start html https pythonhosted org airflow start html export AIRFLOW HOME airf
  • 如何在 AJAX/jQuery POST 成功时返回 PHP 变量

    如何在 PHP 中使用 AJAX 返回变量 我目前正在控制器中使用 echo 来显示价格dropdown change in a div称为价格 但是我有一个隐藏字段 我需要在更改时将行 ID 返回到该隐藏字段 如何在 jQuery 中分配
  • Plotly dash 在重新加载时刷新全局数据

    想象我有一个dash我希望在页面重新加载时刷新全局数据的应用程序 我正在使用一个函数来提供所描述的布局here https dash plotly com live updates 但是 我不确定应该如何 在哪里定义df这样我就可以在回调中
  • 动态生成条件JS

    我正在寻找在循环内动态生成条件的最佳方法 一个价值千字的示例 所以这是我的代码 var condition data label Test for var key in andArray condition andArray key for
  • ctypes 中的 find_library()

    我正在尝试使用 ctypes 中的命令 find library 但出现错误 我不明白其原因 我正在 Windows 上工作 这是代码 import ctypes from ctypes util import find library i
  • 仅在 Google Chrome 中显示“表单控件无效”

    下面的代码在 Safari 中运行良好 但在 Chrome 和 Firefox 中 表单将无法提交 Chrome 控制台记录错误An invalid form control with name is not focusable 有任何想法
  • 原因:com.android.dex.DexException:多个dex文件在Studio 3.0中定义Lorg/apache/commons/io/IOCase

    我正在开发一个项目 这在 Android studio 2 3 3 上工作得很好 但是当我更新我的安卓工作室3 0 https developer android com studio index html并打开我的项目 然后它无法组装 并
  • 如何对仅客户端(本地)Meteor 集合进行排序

    我只有客户端 本地 Meteor 集合定义如下 coffeescript 产品 new Meteor Collection null 然而 当我尝试 find 提供排序参数时 Meteor 告诉我不支持本地集合的排序 这是可以理解的 我想知
  • 结合group by和count mysql

    我需要使用 group by 找出表中的所有状态 SELECT status FROM table GROUP BY status 然后统计找到的结果 SELECT count id WHERE status STATUS 所以像这样的表
  • 抑制 ddl 创建脚本中的 ORA-00942 错误

    假设您生成 ddl 以通过 Hibernate SchemaExport 等创建所有数据库表等 您得到的是一个开头以 drop 语句开头的脚本 没问题 因为我想要这个 但运行此脚本会在 Oracle 数据库上运行时产生大量 ORA 0094
  • 理解OpenCV的unactor函数

    我希望使用为相机计算的畸变系数来消除图像畸变 而不更改相机矩阵 这正是undistort 确实如此 但我想将输出绘制到更大的画布图像上 当我尝试这个时 Mat drawtransform getOptimalNewCameraMatrix
  • 为什么使用 Intranet 站点的兼容模式

    我是一名 Mac 用户 网页设计师 试图了解 IE 11 的 以兼容模式显示 Intranet 站点 选项 我有一个客户 一家建筑公司 曾经在他们的 Windows 服务器上托管他们的旧网站 我没有开发的 HTML 网站 我最近为他们启动的
  • 找不到名为“MainStoryboard_iPad”的故事板

    我无法在模拟器中运行我的项目 因为我收到此错误 找不到名为 MainStoryboard iPad 的故事板 但故事板就在那里 谢谢 我通过以下步骤在我的 iPad 应用程序中成功解决了这个问题 检查构建阶段 编辑 Info plist 文
  • C# 最快的 2 组排序值并集

    合并两组排序值的最快方法是什么 速度 big O 在这里很重要 不清楚 假设这已经被执行了数百万次 假设您不知道值的类型或范围 但有一个有效的方法IComparer
  • 获取变量(非硬编码)名称?

    我正在寻找一种检索变量名称的方法 因此我不必在需要时使用硬编码声明 对于属性名称等 我几乎不相信这是可能的 也许有人有解决方案 注意 即使不是变量 属性也会移动 Pseudo Module Module1 Sub Main Dim vari
  • Javascript:全局元素焦点监听器

    我正在尝试设置一个侦听器来侦听所有焦点事件 特别是 我试图监听输入或文本框获得焦点的任何时间 根据一些研究 广泛接受的实现这一目标的方法是这样的 document body onfocus function event Check the
  • Elasticsearch 错误“无法在路径下找到嵌套对象”

    我知道这个问题之前已经被问过多次 但现有的问题或答案都没有帮助我 查询 Elasticsearch 时出现以下错误 nested 未能在路径 出发 下找到嵌套对象 我正在运行的查询如下 explain true from 0 query n
  • 恢复 iPhone 上已购买的应用内购买项目?

    到目前为止 我得到的是 重新安装后 用户需要单击 购买功能 然后他对 0 99 美元的问题感到害怕 然后必须登录 然后被告知该功能已经购买 他可以免费获得 我知道苹果是一种宗教 用户也是坚定的信徒 但是有没有更好的方法呢 我想要的是检查该功
  • 处理 Windows 应用程序的结束进程

    是否可以在同一个 Windows 应用程序本身中捕获 Windows 应用程序的任务管理器结束进程 我正在使用 C 2 0 win 应用程序 当结束进程发生时 我想进行一些数据库处理 将数据库中的标志从 Y 更改为 N 不 不可能挂钩操作系
  • 通过引用传递匿名变量

    标准 C 类型 例如 int 或 char 具有构造函数 因此您可以使用如下表达式 int a int 67 create anonymous variable and assing it to variable a int b 13 in