const 引用数据成员绑定到临时初始化构造函数中的引用

2023-12-12

考虑以下代码:

#include <iostream>

struct A {
    const char *name;

    A() : name("A") {
        std::cout << "A()\n";
    }

    virtual ~A() {
        std::cout << "~A()\n";
    }
};

class B {
    const A& a;
public:

    B() : a(A()) {
    };

    void print_data() const {
        std::cout << a.name << '\n';
    }

    ~B() {
        std::cout << "~B()\n";
    }
};

int main() {
    B b;
    b.print_data();
    return 0;
}

GCC 4.4 的输出是:

A() ~A() A ~B()

这对我来说看起来很奇怪。我本来期望 A 的临时实例的副本绑定到 B::a 或者该临时实例本身在 ~B() 期间被破坏。

基本上,我认为 B::a 在 b 的生命周期中始终是有效的引用。事实上 b.print_data() 显然可以工作并且编译器不会给出任何警告。

标准c++98/03对于这个问题是怎么说的呢?


持续的引用并不能延长课堂上临时人员的寿命。就是这样。他们只在Foo const& f = Foo(); where foo按值返回,但仅此而已。

§12.2 [class.temporary]

p4 有两种上下文,其中临时变量在与完整表达式末尾不同的点被销毁。 [...]

p5 第二个上下文是当引用绑定到临时对象时。引用所绑定的临时对象或临时对象(临时对象所绑定的子对象的完整对象)在引用的生命周期内持续存在,除非下面指定。构造函数构造函数初始化程序 (12.6.2) 中引用成员的临时绑定将持续存在,直到构造函数退出.

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

const 引用数据成员绑定到临时初始化构造函数中的引用 的相关文章

  • FFMPEG Seeking 带来音频伪影

    我正在使用 ffmpeg 实现音频解码器 在读取音频甚至搜索已经可以工作时 我无法找到一种在搜索后清除缓冲区的方法 因此当应用程序在搜索后立即开始读取音频时 我没有任何工件 avcodec flush buffers似乎对内部缓冲区没有任何
  • SSH 主机密钥指纹与模式 C# WinSCP 不匹配

    我尝试通过 WinSCP 使用 C 连接到 FTPS 服务器 但收到此错误 SSH 主机密钥指纹 与模式不匹配 经过大量研究 我相信这与密钥的长度有关 当使用 服务器和协议信息 下的界面进行连接时 我从 WinSCP 获得的密钥是xx xx
  • Cygwin 下使用 CMake 编译库

    我一直在尝试使用 CMake 来编译 TinyXML 作为一种迷你项目 尝试学习 CMake 作为补充 我试图将其编译成动态库并自行安装 以便它可以工作 到目前为止 我已经设法编译和安装它 但它编译成 dll 和 dll a 让它工作的唯一
  • 使用 Microsoft Graph API 订阅 Outlook 推送通知时出现 400 错误请求错误

    我正在尝试使用 Microsoft Graph API 创建订阅以通过推送通知获取 Outlook 电子邮件 mentions 我在用本文档 https learn microsoft com en us graph api subscri
  • C# 中值类型和引用类型有什么区别? [复制]

    这个问题在这里已经有答案了 我知道一些差异 值类型存储在堆栈上 而引用类型存储在托管堆上 值类型变量直接包含它们的值 而引用变量仅包含对托管堆上创建的对象位置的引用 我错过了任何其他区别吗 如果是的话 它们是什么 请阅读 堆栈是一个实现细节
  • 使用 C# 在 WinRT 中获取可用磁盘空间

    DllImport kernel32 dll SetLastError true static extern bool GetDiskFreeSpaceEx string lpDirectoryName out ulong lpFreeBy
  • 使用 Google Analytics API 在 C# 中显示信息

    我一整天都在寻找一个好的解决方案 但谷歌发展得太快了 我找不到有效的解决方案 我想做的是 我有一个 Web 应用程序 它有一个管理部分 用户需要登录才能查看信息 在本节中 我想显示来自 GA 的一些数据 例如某些特定网址的综合浏览量 因为我
  • c# Asp.NET MVC 使用FileStreamResult下载excel文件

    我需要构建一个方法 它将接收模型 从中构建excel 构建和接收部分完成没有问题 然后使用内存流导出 让用户下载它 不将其保存在服务器上 我是 ASP NET 和 MVC 的新手 所以我找到了指南并将其构建为教程项目 public File
  • 按字典顺序对整数数组进行排序 C++

    我想按字典顺序对一个大整数数组 例如 100 万个元素 进行排序 Example input 100 21 22 99 1 927 sorted 1 100 21 22 927 99 我用最简单的方法做到了 将所有数字转换为字符串 非常昂贵
  • 在 ASP.Net Core 2.0 中导出到 Excel

    我曾经使用下面的代码在 ASP NET MVC 中将数据导出到 Excel Response AppendHeader content disposition attachment filename ExportedHtml xls Res
  • A* 之间的差异 pA = 新 A;和 A* pA = 新 A();

    在 C 中 以下两个动态对象创建之间的确切区别是什么 A pA new A A pA new A 我做了一些测试 但似乎在这两种情况下 都调用了默认构造函数 并且仅调用了它 我正在寻找性能方面的任何差异 Thanks If A是 POD 类
  • 使用安全函数在 C 中将字符串添加到字符串

    我想将文件名复制到字符串并附加 cpt 但我无法使用安全函数 strcat s 来做到这一点 错误 字符串不是空终止的 我确实设置了 0 如何使用安全函数修复此问题 size strlen locatie size nieuw char m
  • Windows 窗体不会在调试模式下显示

    我最近升级到 VS 2012 我有一组在 VS 2010 中编码的 UI 测试 我试图在 VS 2012 中启动它们 我有一个 Windows 窗体 在开始时显示使用 AssemblyInitialize 属性运行测试 我使用此表单允许用户
  • 是否有比 lex/flex 更好(更现代)的工具来生成 C++ 分词器?

    我最近将源文件解析添加到现有工具中 该工具从复杂的命令行参数生成输出文件 命令行参数变得如此复杂 以至于我们开始允许它们作为一个文件提供 该文件被解析为一个非常大的命令行 但语法仍然很尴尬 因此我添加了使用更合理的语法解析源文件的功能 我使
  • 我的 strlcpy 版本

    海湾合作委员会 4 4 4 c89 我的程序做了很多字符串处理 我不想使用 strncpy 因为它不会终止 我不能使用 strlcpy 因为它不可移植 只是几个问题 我怎样才能让我的函数正常运行 以确保它完全安全稳定 单元测试 这对于生产来
  • Windows 10 中 Qt 桌面应用程序的缩放不当

    我正在为 Windows 10 编写一个简单的 Qt Widgets Gui 应用程序 我使用的是 Qt 5 6 0 beta 版本 我遇到的问题是它根本无法缩放到我的 Surfacebook 的屏幕上 这有点难以判断 因为 SO 缩放了图
  • 作为字符串的动态属性名称

    使用 DocumentDB 创建新文档时 我想设置属性名称动态地 目前我设置SomeProperty 像这样 await client CreateDocumentAsync dbs db colls x new SomeProperty
  • 如何构建印度尼西亚电话号码正则表达式

    这些是一些印度尼西亚的电话号码 08xxxxxxxxx 至少包含 11 个字符长度 08xxxxxxxxxxx 始终以 08 开头 我发现这个很有用 Regex regex new Regex 08 0 9 0 9 0 9 0 9 0 9
  • 在Linux中使用C/C++获取机器序列号和CPU ID

    在Linux系统中如何获取机器序列号和CPU ID 示例代码受到高度赞赏 Here http lxr linux no linux v2 6 39 arch x86 include asm processor h L173Linux 内核似
  • 方法参数内的变量赋值

    我刚刚发现 通过发现错误 你可以这样做 string s 3 int i int TryParse s hello out i returns false 使用赋值的返回值是否合法 Obviously i is but is this th

随机推荐

  • 使用data.table在每组数据之前插入一行

    这也许是个愚蠢的问题 但我想在每组数据之前插入一个角色 我在网上能找到的只是如何在每个组后插入一行 此外 插入的行将有一个代表每个 ID 的序列号 例如 我有一个像这样的数据表 df ID TIME VAR VALUE 101 07 02
  • 如何以一致的方式从左到右、从上到下对轮廓进行排序

    我正在研究一个从图像中提取矩形框并按顺序对这些矩形框进行排序的问题 我尝试过的代码是 import cv2 import matplotlib pyplot as plt Load image grayscale adaptive thre
  • 在 Angular 2 组件模板中嵌入小部件

    我的一个组件模板需要有一个小部件https www tradingview com widget 它们提供了我们可以嵌入的脚本标签 但由于 Angular 2 从组件模板中删除了脚本标签 因此嵌入这些类型的小部件应该是最好的 我相信你会做这
  • UWP 应用安装程序自动更新无法正常工作

    我正在尝试从远程源自动更新我的 UWP 应用程序 为此我关注了这两个博客处理 sideloaded uwp and desktop bridge apps 的自动更新 创建应用安装程序文件 vsMSDN 的 我在版本 1803 操作系统内部
  • 可可得到一周的第一天

    如何获取约会一周的第一天 这似乎更容易 因为 当一周从星期日开始时 我需要取回星期日日期 如果从星期一开始 我需要获取星期一的日期 输入日期是一周内的任何日期 我尝试了几种方法 但边缘情况使其变得困难 我做了一个函数 但它不能 100 工作
  • Android 实时 Google 地图位置跟踪

    我正在开发一款 Android 应用程序 玩家可以根据自己的位置在手机上实时战斗 在 Google 地图上 您可以通过一个小蓝点看到您所在的位置 面向的方向以及正在移动的位置 我的问题是 如何将类似的东西集成到我的应用程序中 以便当玩家移动
  • Python:如何使用 Python 访问 mp3 文件的元数据? [复制]

    这个问题在这里已经有答案了 假设我想看看艺术家的名字 或者添加BPM信息 我可以使用哪些 Python 工具来完成此任务 有一个模块叫Python ID3正是这样做的 如果您使用的是 Debian Ubuntu 机器 则其软件包名称为pyt
  • 如何在Spring Data中进行Mongo聚合查询?

    这是我第一次在 Java 中使用 Mongo 这个聚合查询遇到了一些问题 我可以在 Mongo for Spring 中执行一些简单的查询 Query我的存储库接口中的注释扩展了MongoRepository
  • Python:在模块和类之间共享全局变量

    我知道在 Python 中可以跨模块共享全局变量 然而 我想知道这在多大程度上是可能的以及为什么 例如 全局mod py x None mid access mod py from global mod import class delta
  • 来自带有构造函数参数的 lambda 的 RelayCommand

    如果在 XAML 文件中 我将一个 Button 绑定到以下类中的 Command 则单击该 Button 不会导致执行 DoIt class Thing public Thing Foo p1 Command new RelayComma
  • 在正则表达式 python 中使用变量

    值得离开的是 这是我学习 Python 的第二天 而且我对这门语言不是很专业 任何低水平且易于理解的建议将不胜感激 我想在 python 的正则表达式中使用变量 我读过这个问题如何在正则表达式中使用变量 没有任何运气的答案 Code imp
  • 如何对数字进行四舍五入

    我如何能够将这些数字四舍五入到小数点后两位 这些数字全部存储在由网络抓取工具输出的变量中 4 7532 4 7294 4 7056 4 6822857142857 4 65868 4 63522 4 6119866666667 4 5889
  • 修复 IE9 中的 jQuery 拆分器

    Update 这个问题是关于多窗格分割器除了 IE9 之外 它在所有浏览器中都运行良好 右窗格子项的宽度不会随着窗口大小的调整而相应调整 在我的应用程序的上下文中 我还必须使用 setTimeout 0 延迟将右窗格分割方法放在不同的 ja
  • 使用 python selenium chromedriver 从源中选择隐藏选项值

    我正在阅读 Docx 文件 这里是link 解析其中的一些文本 然后使用 python selenium 绑定和 chrome driver 我尝试单击源中的隐藏选项值 driver page source 我知道它无法选择 到目前为止 这
  • 帮助定义全局名称

    My Code def A a A print a return def B print a in B return 当 B 输入解释器时我得到 Traceback most recent call last File
  • RoR - 如何删除 Rails 4.1.1 版本?

    我是 RoR 新手 我尝试遵循 Micheal Hartl 的 Ruby on Rails 教程 在开始本教程之前 我已经提前设置了所有内容 并将 Rails 版本更新为 4 1 1 一切都运行良好 直到教程中我需要有最高 4 0 5 版本
  • Openmp 代码的推力当量

    我尝试在 open mp 中并行化的代码是蒙特卡罗 可归结为如下所示 int seed 0 std mt19937 rng seed double result 0 0 int N 1000 pragma omp parallel for
  • 如何将整数数组转换为树?

    这里有 100 个数字 每行 10 个 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0
  • 如何更改 WooCommerce 中的帐单地址字段标签

    在我的设计中 我有非标准计费字段标签和标记 例如 城镇 城市 应为 省 我使用过WOO文档 并过滤woocommerce billing fields 它适用于类名 占位符 创建新字段 但我无法更改标签 out arr billing ci
  • const 引用数据成员绑定到临时初始化构造函数中的引用

    考虑以下代码 include