零大小数组分配的作用/含义是什么?

2023-12-14

查看一些示例代码并遇到一些零大小数组分配。我创建了以下代码片段来澄清我的问题

这是有效的代码:

class T
{
};

int main(void)
{
  T * ptr = new T[0];

  return 0;
}

它有什么用? ptr 有效吗?这个结构可移植吗?


C++标准中的5.3.4:

6 Every 常量表达式 in a 直接新声明符应为整数常量表达式 (5.19) 并计算为严格正值。这表达 in a 直接新声明符应具有具有非负值的整数或枚举类型(3.9.1)...

7 当值表达 in a 直接新声明符为零,则调用分配函数来分配一个没有元素的数组。

因此,您的代码分配一个数组,该数组在各个方面的行为都与 T 的任何其他数组一样(可以使用 delete[] 删除,作为参数传递,可能还有其他东西)。但是,它没有可访问的索引(即读取或写入 ptr[0] 会导致未定义的行为)。

在这种情况下,常量表达式和表达式之间的区别不在于实际表达式是否是编译时常量(显然是 0),而是它是否指定多维数组的“最后”维度。语法在 5.3.4:1 中定义。

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

零大小数组分配的作用/含义是什么? 的相关文章

随机推荐

  • Bootstrap:更改移动设备上全角列的顺序

    我有这样的架构 col 1 col 2 它们的宽度都是12块 和我的html div class col xs 12 col md 5 1 div div class col xs 12 col md 7 2 div 是否可以在 xs mo
  • 从 VTCompressionOutputCallback 中引用“self”[重复]

    这个问题在这里已经有答案了 我目前正在尝试使用 VideoToolbox 对来自AVCaptureVideoDataOutput 但我在引用时遇到问题self从内部VTCompressionOutputCallback 我的代码如下 var
  • 线程和 GUI 应用程序之间的 Python 新型信号和插槽

    我是 OOP 和 python 的新手 我正在尝试使用新样式的信号和插槽从 Qthread 向 Qt GUI 主窗口发出信号 这就是线程 在单击 GUI 中的 运行 按钮后 3 秒后 我将在 GUI 中发出用于更新消息对话框的信号 我不确定
  • 在Python中序列化二进制数据

    我有一些二进制数据 在 Python 中以字节字符串数组的形式存在 是否有一种可移植的方法来序列化其他语言可以读取的数据 JSON 失败是因为我刚刚发现它没有真正的方法来存储二进制数据 它的字符串应该是 Unicode 我不想使用pickl
  • 在浏览器中执行jdbc小程序

    import java sql import java io import java awt import java awt event import java applet public class A0 extends Applet i
  • 使用连字符时 Spring 表达式语言 (SpEL) 不起作用

    我正在尝试使用 Spring 表达式语言来解析表达式 if myVariable值设置为 first name 带连字符的值 然后获取class org springframework expression spel SpelParseEx
  • 使用 Java 将 ASN1 序列解码为 RSA 公钥

    我有以下 RSA 公钥作为 ASN1 序列 SEQUENCE 2 elem INTEGER 1024 bit 14832 INTEGER 65537 如何在 Java 中将此序列导入为 RSA 公钥 已实施的KeySpecs 例如PKCS8
  • 可以采取哪些措施来防止对返回值进行误导性分配?

    使用 C 多年后 我意识到使用自定义类时语法中的一个怪癖 尽管是正确的语言行为它允许创建非常具有误导性的界面 这里的例子 class complex arg double r double phi public std complex
  • Gulp 注入不起作用

    我尝试使用 gulp inject 将一些文件注入 PHP 文件 这是行不通的 我也尝试过使用 HTML 但这不起作用 我的控制台中的输出显示 gulp inject 6 files into test html 但是没有注入文件 文件数是
  • 在 XCode 11 上哪里可以找到“Log Dyld API 使用情况”和“Log Library Loads”?

    我想在 XCode 控制台中禁用记录动态加载程序事件 dyld 的打印 我找到了解决方案here 但我找不到记录 Dyld API 使用情况 and 日志库加载XCode 11的产品方案诊断中的选项 请帮我找到它们 PS 如果Xcode11
  • getNamedItem() 与 getAttribute() 之间的区别?

    两者都给我一个 XML 元素的属性 他们之间有什么区别吗 添加 W3C 书签文档对象模型核心 作为一个来源 它已经是最好的了 getAttribute 是由Element界面 来自 W3C 获取属性按名称检索属性值 getNamedItem
  • 如何创建包含 xml 和 html 文件的 jar 文件?

    我正在尝试创建一个 jar 文件 其中包含一些所需的类和 java 文件 但我还想包含一些额外的 xml xsl html txt 自述文件 文件 我在 Windows XP 上使用 Eclipse 有没有一种简单的方法可以让我设置目录结构
  • 运行 npm install 时收到“npm ERR!code ELIFECYCLE npm ERR!errno 126”

    我试图在我的服务器上运行 npm install 并收到此错误 gt email protected postinstall home workspace AgreementCancellationProd retrymechanism n
  • 身份验证失败 - 999 - HTTP 状态代码未处理或不允许

    I using scrapy 我想得到忽略响应 URL 我只是在输出控制台中看到 调试 忽略响应 https www mywebsite com gt HTTP 状态代码未处理或不允许 根据文档here您可以添加应该由蜘蛛处理的 HTTP
  • 似乎无法通过 cURL 获取网页内容 - 用户代理和 HTTP 标头均已设置?

    由于某种原因 我似乎无法通过 cURL 获取此特定网页的内容 我已经设法使用 cURL 很好地访问 顶级页面 内容 但相同的自建快速 cURL 功能似乎不适用于链接的子网页之一 顶级页面 http www deindeal ch 子页面 h
  • C++ - stringstream <<“覆盖”

    我正在用 C 制作 OpenGL 游戏 与其他语言相比 我对 C 相当缺乏经验 不管怎样 我为一些图像创建了一个带有 base 目录的字符串流 然后我将此字符串流作为函数参数传递给构造函数 构造函数附加图像文件名 然后尝试加载结果路径 然而
  • 用 NodeJS 编写的简单 TCP 服务器中的 socket.emit?

    正如你将看到的 我不太了解 TCP 服务器和客户端的基本概念 可能 socket emit 甚至不可能 但我想知道最好的替代方案或类似的东西 Socket io 有一个漂亮的东西可以发出事件并在另一端捕获它们 它位于它的首页 http so
  • Azure Function:部署后旧代码仍在运行

    现在 我再次面临这样的问题 即使通过 KUDU 的 zip 部署返回成功后 旧代码仍在 Azure Function App 上使用 当然 我预计新代码会在大约 30 分钟后加载 而不是立即加载 问题被标记为关闭 在这种情况下 最佳实践是什
  • 二维叉积定义

    In 判断线段是否在多边形内部我注意到接受的答案有一个不寻常的二维叉积定义 u1 u2 x v1 v2 u1 v2 u2 v1 我从未遇到过像这样的二维叉积的定义 谁能告诉我这个定义的出处 不是数学专家 但交叉积ND被定义为操作N 1向量产
  • 零大小数组分配的作用/含义是什么?

    查看一些示例代码并遇到一些零大小数组分配 我创建了以下代码片段来澄清我的问题 这是有效的代码 class T int main void T ptr new T 0 return 0 它有什么用 ptr 有效吗 这个结构可移植吗 C 标准中