使用“new”时未初始化的 std::complex 构造函数

2023-12-24

在分析我的程序时,我意识到 10% 的代码都花在了愚蠢的事情上std::complex<double>()构造函数,使用new std::complex<double>[size_of_array].

我已经通过网络和默认构造函数进行了搜索std::complex似乎将值 double() 视为实部和虚部。由于C++不初始化双数,我想知道为什么g++还要费心去初始化std::complex为零,以及我是否可以通过整个程序以某种方式解决这个问题(*)

(*) 现在我必须对创建复数数组的函数进行特殊处理,以分配未初始化的双精度数组并将它们重新转换为复数。

编辑:如下所述,这是我的一个疏忽。默认构造函数对于实部和虚部具有空构造函数(http://en.cppreference.com/w/cpp/numeric/complex/complex http://en.cppreference.com/w/cpp/numeric/complex/complex)

 complex( const T& re = T(), const T& im = T() );

但规范随后引入了 double 的特殊情况

 complex(double re = 0.0, double im = 0.0);

正是这种特殊情况引入了所有开销,因为它绕过了“double”的实际默认构造函数,该构造函数不执行任何操作(与 int、long、float 等相同)。


我想知道为什么 g++ 费心用零初始化 std::complex

因为标准规定必须这样做,所以默认构造函数声明为:

constexpr complex(double re = 0.0, double im = 0.0);

所以它将两个成员都设置为零。

标准库安全地初始化类型是正常的,而不是像使用内置类型(例如double and int*, 例如std::vector<double>如果您调整其大小以便添加新元素,也会对其元素进行零初始化。你可以控制这个vector通过不添加元素vector直到您知道您希望他们拥有什么价值观。

一种可能的解决方法complex是使用不进行初始化的类型:

struct D
{
  D() noexcept { }; // does not initialize val!
  D(double d) noexcept : val(d) { }
  operator double() const noexcept { return val; }
  D& operator=(double d) noexcept { val = d; return *this; }
  double val;
};

现在如果你使用std::complex<D>默认构造函数不执行任何操作。添加explicit转换构造函数和/或转换运算符以满足您的口味。

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

使用“new”时未初始化的 std::complex 构造函数 的相关文章

随机推荐

  • 在博览会应用程序上请求通知权限时收到错误

    我有一个简单的代码 要求过去有效的通知权限 但突然间 它给了我这个错误 错误 调用本机方法时遇到异常 在模块 ExpoNotificationPermissionsModule 上执行导出方法 requestPermissionsAsync
  • 如何使用 pybabel 在 jinja 2.10 {% trans %} 中转义 '%' 字符?

    我正在使用 jinja 2 10 和 pybabel 当我的模板包含以下代码 trans 块内有 字符 时 pybabel compile 不会翻译该字符串 提取的字符串 在 po 中 正常 但在结果页面上它根本没有被翻译 h3 class
  • 从 python 中的函数返回左值

    抱歉 我是 Python 新手 虽然这似乎是一个非常基本的问题 但在询问听众之前 我做了尽职调查 试图避免真正愚蠢的问题 我试图找出从函数返回左值的正确习惯用法 假设我有一个包含 64 个对象的容器 并且我希望能够返回对这些对象的引用 cl
  • Wordpress 中的 PhP 联系表单

    所以我买了一个主题 它有一个简单的 PHP 联系表单 允许用户互相发送消息 但是当发件人填写表单并提交时 电子邮件来自我的默认 WordPress 管理员电子邮件 而不是用户输入的电子邮件地址表格 因此 如果收件人尝试回复他们的电子邮件 邮
  • Google Apps 脚本 - 从模板创建的每个文档中都出现“需要授权”

    我有一个 Google 文档 它有一个自定义 UI 菜单 其中包含一个选项 可以将新页面添加到文档并用一些数据填充它 我使用此文档作为模板 通过 Web 应用程序为单个用户创建许多其他文档 因此 我的用户来到我的 web 应用程序 单击生成
  • Boost::bind 和 Boost Phoenix::bind 有什么区别?

    Boost bind 和 Boost Phoenix bind 有什么区别 phoenix bind就好像lambda bind返回一个表达式模板的函数 该模板记录它必须调用给定的函数 它们被设计为分别与phoenix 和lambda 一起
  • 使用 jQuery 克隆

    我有一个允许用户推荐朋友的表格 我想在 朋友电子邮件 和 朋友姓名 这两个输入字段下方添加一个链接 该链接将克隆 朋友框 一次并将其添加到下面 另外 好友邮箱 和 好友姓名 的name属性为name friend email 0 and n
  • 如何将张量转换为字符串

    我正在测试 tf data 这是现在批量提供数据的推荐方法 但是 我正在加载自定义数据集 因此我需要 str 格式的文件名 但是当创建 tf Dataset from tensor slices 时 它们是 Tensor 对象 def lo
  • 根据列聚合过滤选定的列

    我希望仅选择唯一值少于 3 个的列 我可以通过生成布尔掩码pl all n unique lt 3 但我不知道是否可以通过 Polars API 使用该掩码 目前 我正在通过 python 解决这个问题 有更惯用的方法吗 import po
  • Logcat 消息在短时间内消失

    有时 eclipse logcat 消息在关闭应用程序一小段时间后就会消失 大多不会那么短 如何让它永远不会自动消失 编辑 我的设备仍然连接 以及如何将其设置为即使在设备断开连接并在下次启动之前清除后也显示日志 这也发生在我身上 设备已连接
  • Perl 正则表达式 'e' (eval) 修饰符带 s///

    我在理解 e 正则表达式修饰符的简单用法时遇到了一些困难 my var testing In this string we are var the e modifier s w 1 ee print 返回 在此字符串中 我们正在测试 e 修
  • 如何使用 DropDownList 的 SelectedIndexChanged 事件

    我有两个DropDownList在我的网络表单中 当我在第一个下拉列表中选择一个值时 我希望在第二个下拉列表中自动选择一个相关值 这就是我目前所拥有的 table tr td td tr table
  • 合并两个 Sass 文件

    我想即时将两个 sass 文件合并在一起 例如 如果我有 some class color white and some class background color red 那么最终结果将是 some class color white
  • 无法上传 > ~2GB 到 Google Cloud Storage

    追踪如下 相关的Python片段 bucket get bucket location bucket blob bucket blob location path blob upload from filename source path
  • 缩放用户控件中的裁剪像素

    我开发了一个用户控件 用户控件就像一个放大镜 用户控件有一个图像按钮 它显示逐像素裁剪的图像 StorageFile storageFile await StorageFile GetFileFromApplicationUriAsync
  • ASP.NET SimpleMembershipProvider 自动迁移

    因此 我尝试在新的 MVC 4 项目中使用自动迁移 但不知何故它不起作用 我关注了这篇博文 http blog longle net 2012 09 25 seeding users and roles with mvc4 simpleme
  • github 提交中的虚拟文件

    我正在尝试将一些更改推送到我的 github 存储库 但推送失败 因为 git 认为存储库中存在一个大文件 remote Error code 38865a38ccad9b1d9f394c35344906e6 remote warning
  • 使用 -viewWithTag: 当多个视图具有相同的 .tag 时,返回什么 UIView?

    假设我有 4 个 UIView 在 IB 中制作 所有标签属性 2 当我看到以下内容时 UIView thisView UIView self view viewWithTag 2 由于多个 UIView 具有相同的 tag 值 检索该 U
  • 如何使用窗口句柄更改窗口所有者

    我想制作一个 NET 表单作为另一个外部应用程序 与 NET 无关的纯 Win32 的最顶层表单 因此它保持在 Win32App 之上 但不在运行的其余应用程序之上 我有Win32App的句柄 由Win32App本身提供 并且我已经尝试过W
  • 使用“new”时未初始化的 std::complex 构造函数

    在分析我的程序时 我意识到 10 的代码都花在了愚蠢的事情上std complex