为什么不对临时对象进行非常量引用? [复制]

2023-12-26

C++ 只允许将临时对象分配给 const 引用。它不允许分配临时对象来引用。

例如:

String& a = String("test");         // Error
const String& a = String("test");   // Ok

我到处谷歌搜索这个结果,我只看到以下答案

  1. 修改临时对象会导致无法识别的问题
  2. 修改临时对象是危险的
  3. 在某些时候,你会忘记它是一个临时变量

据说,声明后临时对象就会消失。所以你不应该修改它。

如果 C++ 如此热衷于阻止修改临时对象,那么它应该阻止读取临时对象,对吗?如果临时对象消失了,那么从那里读取内容就没有意义了,对吗?可能发生权利的情况也可能涉及读取。

那为什么它单独阻止写入并允许读取呢?

请给我一个可靠的 C++ 代码解释。

请不要通过指出一些替代方案来偏离问题。请用代码给我可靠的答案,为什么临时对象允许使用 const int & 而不允许使用 int & 。

有人说&&在那里..我的问题不同.. 另一种说法是,改变不会反映。即使它是 const int & ,改变也不会反映。例如:双a;常量 int & i = a;一个++;不会影响我..


不允许引用临时变量的最初情况是针对函数参数。假设这是允许的:

void inc(double& x)
{ x += 0.1; }

int i = 0;
inc(i);

为什么不是i改变了?

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

为什么不对临时对象进行非常量引用? [复制] 的相关文章

  • 编译时运算符

    有人可以列出 C 中可用的所有编译时运算符吗 C 中有两个运算符 无论操作数如何 它们的结果始终可以在编译时确定 它们是sizeof 1 and 2 当然 其他运算符的许多特殊用途可以在编译时解决 例如标准中列出的那些整数常量表达式 1 与
  • 动态加载程序集的应用程序配置

    我正在尝试将模块动态加载到我的应用程序中 但我想为每个模块指定单独的 app config 文件 假设我的主应用程序有以下 app config 设置
  • 在哪里可以找到列出 SSE 内在函数操作的官方参考资料?

    是否有官方参考列出了 GCC 的 SSE 内部函数的操作 即 头文件中的函数 除了 Intel 的 vol 2 PDF 手册外 还有一个在线内在指南 https www intel com content www us en docs in
  • 查找c中结构元素的偏移量

    struct a struct b int i float j x struct c int k float l y z 谁能解释一下如何找到偏移量int k这样我们就可以找到地址int i Use offsetof 找到从开始处的偏移量z
  • 嵌套接口:将 IDictionary> 转换为 IDictionary>?

    我认为投射一个相当简单IDictionary
  • 用于登录 .NET 的堆栈跟踪

    我编写了一个 logger exceptionfactory 模块 它使用 System Diagnostics StackTrace 从调用方法及其声明类型中获取属性 但我注意到 如果我在 Visual Studio 之外以发布模式运行代
  • 使用 Bearer Token 访问 IdentityServer4 上受保护的 API

    我试图寻找此问题的解决方案 但尚未找到正确的搜索文本 我的问题是 如何配置我的 IdentityServer 以便它也可以接受 授权带有 BearerTokens 的 Api 请求 我已经配置并运行了 IdentityServer4 我还在
  • SolrNet连接说明

    为什么 SolrNet 连接的容器保持静态 这是一个非常大的错误 因为当我们在应用程序中向应用程序发送异步请求时 SolrNet 会表现异常 在 SolrNet 中如何避免这个问题 class P static void M string
  • 什么时候虚拟继承是一个好的设计? [复制]

    这个问题在这里已经有答案了 EDIT3 请务必在回答之前清楚地了解我要问的内容 有 EDIT2 和很多评论 有 或曾经 有很多答案清楚地表明了对问题的误解 我知道这也是我的错 对此感到抱歉 嗨 我查看了有关虚拟继承的问题 class B p
  • 如何查看网络连接状态是否发生变化?

    我正在编写一个应用程序 用于检查计算机是否连接到某个特定网络 并为我们的用户带来一些魔力 该应用程序将在后台运行并执行检查是否用户请求 托盘中的菜单 我还希望应用程序能够自动检查用户是否从有线更改为无线 或者断开连接并连接到新网络 并执行魔
  • 这些作业之间是否存在顺序点?

    以下代码中的两个赋值之间是否存在序列点 f f x 1 1 x 2 不 没有 在这种情况下 标准确实是含糊不清的 如果你想确认这一点 gcc 有这个非常酷的选项 Wsequence point在这种情况下 它会警告您该操作可能未定义
  • 覆盖子类中的字段或属性

    我有一个抽象基类 我想声明一个字段或属性 该字段或属性在从该父类继承的每个类中具有不同的值 我想在基类中定义它 以便我可以在基类方法中引用它 例如覆盖 ToString 来表示 此对象的类型为 property field 我有三种方法可以
  • 链接器错误:已定义

    我尝试在 Microsoft Visual Studio 2012 中编译我的 Visual C 项目 使用 MFC 但出现以下错误 error LNK2005 void cdecl operator new unsigned int 2
  • WPF/C# 将自定义对象列表数据绑定到列表框?

    我在将自定义对象列表的数据绑定到ListBox in WPF 这是自定义对象 public class FileItem public string Name get set public string Path get set 这是列表
  • 混合 ExecutionContext.SuppressFlow 和任务时 AsyncLocal.Value 出现意外值

    在应用程序中 由于 AsyncLocal 的错误 意外值 我遇到了奇怪的行为 尽管我抑制了执行上下文的流程 但 AsyncLocal Value 属性有时不会在新生成的任务的执行范围内重置 下面我创建了一个最小的可重现示例来演示该问题 pr
  • C# 模拟VolumeMute按下

    我得到以下代码来模拟音量静音按键 DllImport coredll dll SetLastError true static extern void keybd event byte bVk byte bScan int dwFlags
  • IEnumreable 动态和 lambda

    我想在 a 上使用 lambda 表达式IEnumerable
  • Windows 和 Linux 上的线程

    我在互联网上看到过在 Windows 上使用 C 制作多线程应用程序的教程 以及在 Linux 上执行相同操作的其他教程 但不能同时用于两者 是否存在即使在 Linux 或 Windows 上编译也能工作的函数 您需要使用一个包含两者的实现
  • 如何在文本框中插入图像

    有没有办法在文本框中插入图像 我正在开发一个聊天应用程序 我想用图标图像更改值 等 但我找不到如何在文本框中插入图像 Thanks 如果您使用 RichTextBox 进行聊天 请查看Paste http msdn microsoft co
  • C++ 中类级 new 删除运算符的线程安全

    我在我的一门课程中重新实现了新 删除运算符 现在我正在使我的代码成为多线程 并想了解这些运算符是否也需要线程安全 我在某处读到 Visual Studio 中默认的 new delete 运算符是线程安全的 但这对于我的类的自定义 new

随机推荐

  • Mac 上 C++ 中的分段错误 11

    当我尝试运行这个时 int N 10000000 short res N 我遇到分段错误 11 当我改变为 int N 1000000 short res N 效果很好 您已经超出了操作系统指定的堆栈空间 如果您需要更多内存 最简单的方法是
  • 无法使用 npm 重建依赖关系

    当我尝试将本地运行良好的 NodeJS 应用程序推送到 Heroku 时 以下是我在终端中得到的内容 dcaclab ubuntu RubymineProjects nodejs consumer git push heroku maste
  • 为什么不注入 IServiceProvider 而不是每个单独的依赖项?

    我想知道为什么不显式使用 IServiceProvider 来解决依赖项而不是单独注入每个依赖项 换句话说 为什么要使用这种方法 public class A private B b private C c private D d priv
  • 使用 CLI 或任何其他方式将 C++ 库静态链接到 C# 进程

    是否可以采用用 C 编写的静态库 并以某种方式将其集成到 NET 进程中 从而将 NET 进程与 lib 集成到一个 exe 文件中 我的意思是 我知道我可以从 C 进程中调用 C DLL 但用户仍然必须拥有 C DLL 但是否可以使用 l
  • 使复选框绑定到可为 null 的 bool 转换,从 null 到 true

    我有一个复选框及其IsChecked属性绑定到可为 null 的布尔值 当我的控件首次加载时 该值为空 并且该复选框显示为灰色 这就是我要的 当用户单击该复选框时 它会转为 false 未选中状态 然而 99 的情况下 用户会想要勾选该复选
  • Julia UndefVarError:未定义子类型

    不清楚为什么我得到ERROR LoadError UndefVarError subtypes not defined执行 jl 文件时 但从 REPL 执行时则不然 E g abstract type Asset end abstract
  • 使用 Eclipse 在远程计算机中运行 Spark/Cloudera 应用程序

    我在理解使用 Scala Spark shell 和 Hadoop 环境进行开发的逻辑架构时遇到了一些问题 为了更好地描述逻辑架构 我画了一个小架构 如图所示 我在我的个人电脑上安装了 Eclipse 我想以远程模式从我的电脑运行 scal
  • C++ Windows API - 如何检索字体缩放百分比

    我想检索 把文字变大 C Windows API 应用程序中的百分比 我知道如何检索缩放 DPI 系数 但我还想包括字体缩放百分比 请参阅附图 上值 而不是下值 最终 我想要制作保留用户字体和 DPI 缩放设置的应用程序 以便完全支持辅助功
  • Kivy 日期选择器小部件

    已解决 请参阅下面的已接受答案的应用程序和功能 kivy DatePicker 小部件的源代码 我一直在学习 Kivy 并决定制作一个日期选择器小部件作为学习练习 import kivy kivy require 1 4 0 from ki
  • 在android中将SQLite数据库与远程mysql数据同步

    android中如何同步SQLite数据库和远程MySQL数据 为了说清楚 我想知道sqlite数据和远程mysql之间的同步是如何工作的 即 当远程mySQL数据库更新时 SQLite数据也应该更新 而无需按下任何按钮或向下滚动 如何使用
  • 使用线程打印奇偶数

    使用线程打印奇偶数 创建一个线程类 两个线程实例 一个将打印奇数 另一个将打印偶数 我做了以下编码 但到了死锁状态 有人可以解释一下这可能是什么原因吗 public class NumberPrinter implements Runnab
  • 我可以在某些列值上使用 pandas 数据框读取一系列行吗?

    这是我的数据 prakash 101 Ram 107 akash 103 sakshi 115 vidushi 110 aman 106 lakshay 99 我想从中选择所有行akash to vidushi或所有行Ram to aman
  • UICollectionview rollToItemAtIndexPath,在动画完成之前不加载可见单元格

    我有一个UICollectionView有 142 个电池 7 5 随时可见 我正在从以下位置移动一个单元格indexPath0 表示 100 但我也想滚动到那个新位置 下面的代码工作正常 但它对移动和滚动进行动画处理 然后加载中央 移动单
  • 如何向 WiX 工具集添加可选 UI

    我已经为项目部署制作了一个安静的安装程序 无需单击任何按钮 但安装过程中会显示一些进度条 这次我想添加一个可选的图形用户界面 默认情况下 当给出参数时 安装程 序应该直接运行而不单击任何内容 比方说 msiexec范围 qf 安装程序会弹出
  • Eclipse:在 log4j.xml 中引用 log4j.dtd

    我已经使用 log4j 有一段时间了 我通常在 log4j xml 的顶部使用它 可能就像许多其他人一样 根据 Google 的说法 这是the方法 显然这是可行的 但是 Eclipse 不提供用于编写 XML 等内容的上下文相关帮助 此外
  • webkit-transform 覆盖 Chrome 13 中的 z-index 排序

    Update 抱歉未能添加我们也分层了很多的小细节div元素彼此叠加z index 在对这个问题进行更多研究之后 似乎webkit transform实际上与z index顺序 并且实际问题与动画本身无关 结束更新 我目前正在开发一个应用程
  • 为什么 getElementsByTagName 返回未定义?

    我正在尝试打电话document getElementsByTagName 我回来了undefined结果 无论我传递什么参数 即使我通过了 我尝试用谷歌搜索它 但所有搜索结果都是关于 getElementsByTagName 结果数组的元
  • C# 字典到 .csv

    我有 C Dictionary我想创建一个 csv从中获取文件 例如我有这本字典 Dictionary
  • 设置 Visual Studio 的“附加到进程”对话框中显示的“标题”值?

    当您在 Visual Studio 中选择 调试 附加到进程 时 显示的对话框具有 标题 列 默认情况下 这显示属于该进程的主窗口的标题 例如 它可能会显示 这是一个漆黑的暴风雨之夜 记事本 如何为没有主窗口的应用程序 例如 Windows
  • 为什么不对临时对象进行非常量引用? [复制]

    这个问题在这里已经有答案了 C 只允许将临时对象分配给 const 引用 它不允许分配临时对象来引用 例如 String a String test Error const String a String test Ok 我到处谷歌搜索这个