隐式对象创建是否规避了 std::launder 的可达性条件?

2024-01-02

这个问题源于对我的回答的思考给定两个不同类型的对象及其在内存中的相对位置,我可以从指向另一个对象的指针派生出指向另一个对象的指针吗? https://stackoverflow.com/questions/76113351/given-two-objects-of-different-types-and-their-relative-location-in-memory-can.

我的假设是当前标准允许,假设sizeof(int) == sizeof(float), alignof(int) == alignof(float) and sizeof(int) == alignof(int), 优化函数g in

void f(float*);

int g() {
    alignas(int) std::byte storage[sizeof(int)*2];
    auto x = new(storage) float();
    auto y = new(storage + sizeof(float)) int();
    f(x);
    return *y;
}

总是回来0,因为不可能达到int对象从float对象由于可达性先决条件std::launder。据我所知,当前的编译器实际上没有这样做。

然而,假设f定义如下:

struct A {
    float x;
    int y;
};

void f(float* x) {
    reinterpret_cast<A*>(x)->y = 1;
}

假设sizeof(A) == 2*sizeof(int) and alignof(A) == alignof(int)关于实施。

Doesn't f然后有明确定义的行为,因此优化是不可能的,因为隐式对象创建时的生命周期storage开始可以创建一个A其中的对象int and float对象将成为成员子对象,并且float对象是可以与指针相互转换的A object?

我是否误解了预期的优化好处std::launder可达性先决条件还是 C++20 的隐式对象创建只是搞砸了?它是否应该仅适用于非标准布局类型?

另请参阅我的相关问题std::launder 与放置 - 新的可达性条件 https://stackoverflow.com/questions/70807452/stdlaunder-vs-placement-new-reachabibility-condition.


None

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

隐式对象创建是否规避了 std::launder 的可达性条件? 的相关文章

随机推荐

  • 无法以非 root 用户身份在 DockerFile 中解压缩 zip 文件

    当我尝试在 DockerFile 中解压 zip 文件时 不断收到以下错误 checkdir error cannot create my archive Permission denied unable to process my arc
  • Spring Data 似乎不理解@Column 名称

    我正在使用 Spring boot 1 4 1 RELEASE 以及 Spring Data 和 Hibernate 将一些数据保存到 MySQL 数据库中 我有这堂课Respondent 注释为 Entity以及注释如下的字段之一 Col
  • 如何在Python中使用win32gui关闭带句柄的窗口

    我已经通过 Python 中的 win32gui 库获得了我想要定位的窗口的句柄 我如何关闭窗口 我有以下代码 第二行做了我想做的事情 但最后一行似乎是错误的 handle win32gui FindWindow None r Notepa
  • 在android中制作一个RTL导航抽屉

    我想让我的导航从以下位置打开right to left 但是 一旦我更改这些步骤中的任何一个 我的程序就会在运行应用程序后单击导航后面临错误强制关闭 我的 main activity xml
  • 如何从任务管理器进程列表中的进程列表中区分不同的JavaWS应用程序?

    我正在使用 JavaWS 启动应用程序 然后如何检查该应用程序是否在用户计算机中运行 因为它在任务管理器进程列表中的名称不是我在 JNLP 文件中给出的名称 NOTE 我检查了任务管理器进程列表 但该进程的名称是 javaw exe 并且所
  • 将子元素添加到 React 元素

    如何向 React 组件添加子组件 this props children似乎是只读的 所以不能直接改变它 假设我有 var myComponent
  • .NET 4.5 中 WPF 中的异步事件处理程序无响应

    我创建了一个简单的异步操作 当单击按钮时该操作将被踢出 这是整个代码 public partial class MainWindow Window public MainWindow InitializeComponent private
  • 创建使用 .NET 命名空间的库的最佳实践

    编写一个定义依赖于另一个库的接口的库是一种不好的做法吗 我知道紧密耦合不好 但是在使用 NET 类时这仍然适用吗 例如 在 NET 中 如果我有一个返回 Color 对象的库 它将强制使用我的库的任何内容都依赖于 System Drawin
  • 强制 Maven 仅使用第一级依赖项

    我有一个 Maven Java 项目 我不希望在编译项目时通过一系列子依赖项偶然满足我的项目依赖项 当构建最终的战争时 maven 必须检查所有使用的依赖项并向战争添加必要的库 这对我来说是可以的 但是在编译代码时 我想确保只使用直接依赖项
  • 使用 NumPy 进行 LMS 批量梯度下降

    我正在尝试编写一些非常简单的 LMS 批量梯度下降 但我相信我在梯度方面做错了 数量级与初始值之间的比率theta的元素有很大不同theta所以要么theta 2 不动 例如 如果alpha 1e 8 or theta 1 发射 例如 如果
  • 用于生产用途的 Spring Security kerberos 扩展?

    Spring Security Kerberos 扩展在网站上被列为版本 1 0M2Spring 源网站 http static springsource org spring security site extensions krb in
  • 数的质因数分解

    我正在尝试编写一个程序来查找给定数字的所有素因数 并尝试了以下操作 def factors nr i 2 factors while i
  • Markdown 链接在新选项卡中打开

    有没有办法在新选项卡中打开以下 Markdown 链接 我得到了一些结果降价目标 blank https stackoverflow com questions 4425198 markdown target blank answer 47
  • 使用 Fluent NHibernate 映射没有 setter 的只读属性

    我有一个看起来像这样的域类 我想要 NHibernatesave当前值LastUpdate插入 更新时 以便我可以在查询中使用它 但在检索时忽略它Foo从数据库中获取并让对象本身在我实际访问它时重新计算值 public class Foo
  • Laravel 中的 With() 与 Compact()

    有什么区别吗with and compact 哪一种更有效率 with 是一个 Laravel 函数并且compact 是一个 PHP 函数 具有完全不同的目的 with 允许您将变量传递给视图并compact 从作为字符串参数给出的现有变
  • asp.net mvc highchart 线图 json

    我试图在以下位置获取行示例 http www highcharts com demo line basic grid http www highcharts com demo line basic grid使用 jsonresult 但不知
  • 在其他指令/语句之前的指令/语句是否能保证首先执行?

    考虑一下从书中摘取的片段Java 并发实践作者 Joshua Bloch public class NoVisibility private static boolean ready private static int number pr
  • 同步Access DB和MySQL

    我有一个客户 他有一个使用 Access 的非常大的内部系统 该系统在内部用于处理几乎所有公司数据 他们想要该数据库中的客户数据的 Web 前端 并且将在不同的服务器上运行 鉴于 Access 的限制 前端可能会使用 MySQL 这就留下了
  • 如何拒绝访问我的部分视图的直接 URL?

    我的控制器中有一些部分视图 问题是 如果用户输入网址 www mydomain com mycontroller mypartialview 他们就可以可视化我的部分视图 如何拒绝直接访问 并允许仅从基本视图使用部分视图 Thank s 添
  • 隐式对象创建是否规避了 std::launder 的可达性条件?

    这个问题源于对我的回答的思考给定两个不同类型的对象及其在内存中的相对位置 我可以从指向另一个对象的指针派生出指向另一个对象的指针吗 https stackoverflow com questions 76113351 given two o