在 C++ 中声明基于函数参数的本地数组是合法的

2024-01-17

我从一本书中读到,以下 C++ 代码不应编译:

  void f(int n, int m){
     int a[n] , b[n][m];
  }

因为数组的大小不是在编译时确定的。

但我尝试了一下,发现无论是全局函数还是成员函数,使用g++都可以编译成功。

这在最近的 C++ 实现中是合法的吗?或者这本书根本就是错误的。

谢谢。

Edit

我立刻就看到了一些回复。我在 Java 中也有这个奇迹。我注意到在java中,这是支持的(如果这也与版本相关,请纠正我)。那么为什么会有这样的差异呢?它与使用引用与对象有什么关系吗?但是,在 java 中,我仍然可以从基元的函数参数中声明一个具有可变长度的数组。

Edit 2

如果你说不应该的话,下面的 Java 代码确实可以编译:

class Test1 {
    public int[] f(int n,int k){
        int[] c=new int[n];
        Arrays.fill(c, k);
        return c;
    }
}

这些被称为可变长度数组 http://en.wikipedia.org/wiki/Variable-length_array。它们在 C++ 中是不允许的。但有些编译器(例如 GCC)支持它们作为扩展。

在 C99 中,允许使用变长数组。

EDIT :

对于你的新问题。这个问题的最佳答案解释了为什么 C++ 没有可变长度数组。

为什么堆栈中没有可变大小的数组? https://stackoverflow.com/questions/7812566/why-no-variable-size-array-in-stack

EDIT 2:

在Java中,数组是存储在堆上而不是调用堆栈上的对象。因此这个问题没有实际意义——所有数组都在堆上,因此 VLA 不存在。

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

在 C++ 中声明基于函数参数的本地数组是合法的 的相关文章

  • getResourceAsStream() 可以找到 jar 文件之外的文件吗?

    我正在开发一个应用程序 该应用程序使用一个加载配置文件的库 InputStream in getClass getResourceAsStream resource 然后我的应用程序打包在一个 jar文件 如果resource是在里面 ja
  • 加密 JBoss 配置中的敏感信息

    JBoss 中的标准数据源配置要求数据库用户的用户名和密码位于 xxx ds xml 文件中 如果我将数据源定义为 c3p0 mbean 我会遇到同样的问题 是否有标准方法来加密用户和密码 保存密钥的好地方是什么 这当然也与 tomcat
  • Java Integer CompareTo() - 为什么使用比较与减法?

    我发现java lang Integer实施compareTo方法如下 public int compareTo Integer anotherInteger int thisVal this value int anotherVal an
  • 使用 WebClient 时出现 System.Net.WebException:无法创建 SSL/TLS 安全通道

    当我执行以下代码时 System Net ServicePointManager ServerCertificateValidationCallback sender certificate chain errors gt return t
  • 如何设计以 char* 指针作为类成员变量的类?

    首先我想介绍一下我的情况 我写了一些类 将 char 指针作为私有类成员 而且这个项目有 GUI 所以当单击按钮时 某些函数可能会执行多次 这些类是设计的单班在项目中 但是其中的某些函数可以执行多次 然后我发现我的项目存在内存泄漏 所以我想
  • Java执行器服务线程池[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如果我使用 Executor 框架在
  • 无法捆绑适用于 Mac 的 Java 应用程序 1.8

    我正在尝试将我的 Java 应用程序导出到 Mac 该应用程序基于编译器合规级别 1 7 我尝试了不同的方法来捆绑应用程序 1 日食 我可以用来在 Eclipse 上导出的最新 JVM 版本是 1 6 2 马文 看来Maven上也存在同样的
  • 如何序列化/反序列化自定义数据集

    我有一个 winforms 应用程序 它使用强类型的自定义数据集来保存数据进行处理 它由数据库中的数据填充 我有一个用户控件 它接受任何自定义数据集并在数据网格中显示内容 这用于测试和调试 为了使控件可重用 我将自定义数据集视为普通的 Sy
  • 什么时候虚拟继承是一个好的设计? [复制]

    这个问题在这里已经有答案了 EDIT3 请务必在回答之前清楚地了解我要问的内容 有 EDIT2 和很多评论 有 或曾经 有很多答案清楚地表明了对问题的误解 我知道这也是我的错 对此感到抱歉 嗨 我查看了有关虚拟继承的问题 class B p
  • Android 中麦克风的后台访问

    是否可以通过 Android 手机上的后台应用程序 服务 持续监控麦克风 我想做的一些想法 不断聆听背景中的声音信号 收到 有趣的 音频信号后 执行一些网络操作 如果前台应用程序需要的话 后台应用程序必须能够智能地放弃对麦克风的访问 除非可
  • 对现有视频添加水印

    我正在寻找一种用 C 在视频上加水印的方法 就像在上面写文字一样 图片或文字标签 我该怎么做 谢谢 您可以使用 Nreco 视频转换器 代码看起来像 NReco VideoConverter FFMpegConverter wrap new
  • 玩!框架:运行“h2-browser”可以运行,但网页不可用

    当我运行命令时activator h2 browser它会使用以下 url 打开浏览器 192 168 1 17 8082 但我得到 使用 Chrome 此网页无法使用 奇怪的是它以前确实有效 从那时起我唯一改变的是JAVA OPTS以启用
  • 向现有 TCP 和 UDP 代码添加 SSL 支持?

    这是我的问题 现在我有一个 Linux 服务器应用程序 使用 C gcc 编写 它与 Windows C 客户端应用程序 Visual Studio 9 Qt 4 5 进行通信 是什么very在不完全破坏现有协议的情况下向双方添加 SSL
  • 如何将带有 IP 地址的连接字符串放入 web.config 文件中?

    我们当前在 web config 文件中使用以下连接字符串 add name DBConnectionString connectionString Data Source ourServer Initial Catalog ourDB P
  • C# 成员变量继承

    我对 C 有点陌生 但我在编程方面有相当广泛的背景 我想做的事情 为游戏定义不同的 MapTiles 我已经像这样定义了 MapTile 基类 public class MapTile public Texture2D texture pu
  • 测试用例执行完成后,无论是否通过,如何将测试用例结果保存在变量中?

    我正在使用 NUNIT 在 Visual Studio 中使用 Selenium WebDriver 测试用例的代码是 我想在执行测试用例后立即在变量中记录测试用例通过或失败的情况 我怎样才能实现这一点 NUnit 假设您使用 NUnit
  • C++ 标准是否指定了编译器的 STL 实现细节?

    在写答案时this https stackoverflow com questions 30909296 can you put a pimpl class inside a vector我遇到了一个有趣的情况 这个问题演示了这样一种情况
  • 按日期对 RecyclerView 进行排序

    我正在尝试按日期对 RecyclerView 进行排序 但我尝试了太多的事情 我不知道现在该尝试什么 问题就出在这条线上适配器 notifyDataSetChanged 因为如果我不放 不会显示错误 但也不会更新 recyclerview
  • 如何实现仅当可用内存较低时才将数据交换到磁盘的写缓存

    我想将应用程序生成的数据缓存在内存中 但如果内存变得稀缺 我想将数据交换到磁盘 理想情况下 我希望虚拟机通知它需要内存并将我的数据写入磁盘并以这种方式释放一些内存 但我没有看到任何方法以通知我的方式将自己挂接到虚拟机中before an O
  • 如何防止用户控件表单在 C# 中处理键盘输入(箭头键)

    我的用户控件包含其他可以选择的控件 我想实现使用箭头键导航子控件的方法 问题是家长控制拦截箭头键并使用它来滚动其视图什么是我想避免的事情 我想自己解决控制内容的导航问题 我如何控制由箭头键引起的标准行为 提前致谢 MTH 这通常是通过重写

随机推荐

  • DSOFramer 在另一个窗口中关闭 Excel 文档。如果文件中未保存数据,dsoframer 无法打开并显示“尝试访问无效地址”

    我在用着Microsoft s DSOFramer控件允许我在对话框中嵌入 Excel 文件 以便用户可以选择他的工作表 然后选择他的单元格范围 它与我的对话框上的导入按钮一起使用 问题是当我打电话时DSOFramer s OPEN函数 如
  • Pandas - 对 Na 以外的值使用“ffill”

    有没有办法使用ffill对非值的方法NaN I have NaN在我的数据框中 但我添加了这些NaN using addNan sample colA replace A NaN 这就是我的数据框 df好像 ColA ColB ColC C
  • 如何在pyopengl中使用鼠标旋转立方体

    我知道问题是什么 但我无法找出解决方案 问题在于 旋转是在立方体上固定轴的情况下应用的 因此 如果将一个轴旋转 Pi 弧度 则另一轴看起来就像鼠标控件被反转 我希望它能够做到这一点 因此单击鼠标左键 然后将鼠标向右移动可将立方体向右旋转 将
  • 从 str 和 Enum 继承有哪些注意事项

    使用从两者继承的类有哪些注意事项 如果有 str and Enum 这被列为解决以下问题的可能方法将 Enum 成员序列化为 JSON https stackoverflow com questions 24481852 serialisi
  • 有没有办法判断iphone是否处于漫游状态?

    我正在开发一个 iPhone 应用程序 并且非常想确定该设备是否正在漫游 以便我可以智能地避免用户在脱离家庭网络时花费昂贵的连接费用 我正在编写的应用程序适用于越狱手机 但如果可能的话 我更愿意使用标准 SDK 这是我已经发现的 1 苹果S
  • 处理CursorLoader异常

    我有一个实现 LoaderManager 并使用 CursorLoader 的片段 没什么花哨的 我想捕获查询期间抛出的异常 但我不知道如何捕获 有什么帮助吗 谢谢 我尝试继承并实现一个侦听器 然后尝试继承并实现一个回调 就我而言 最简单且
  • sinon 存根不替换函数

    我正在尝试使用 sinon 存根来替换可能需要很长时间的函数 但是当我运行测试时 测试代码似乎没有使用 sinon 存根 这是我要测试的代码 function takeTooLong return returnSomething funct
  • ORM UniqueConstraint,空值重复

    我有一个对 3 个字段具有唯一约束的实体 2 个字段不可为空 第三个字段可为空 我的问题是 当第三个字段为空时 唯一约束不起作用 因此我可以在数据库中包含一些重复的值 例如 5 1 null 5 1 null 为我 5 1 null 是一个
  • Drupal 6 到 7 迁移

    我们有一个用 drupal 6 编写的 drupal 站点 我们知道我们必须为 drupal 7 重写它 大部分 但最重要的部分是迁移数据 CCK migrate 只能迁移大约 90 的田地 我正在寻找一种干净的方法将 drupal 6 数
  • 如何在 Angular 的构造函数中使用 @Inject 文本测试组件

    Angular 6 我在组件的构造函数中声明了一些注入的变量 但是当我运行时 我不知道如何在单元测试文件中配置注入的值ng test它给出了以下错误 错误 StaticInjectorError DynamicTestModule 标题 S
  • 如何更改代码中 Xaml 资源中的颜色定义 (UWP)

    UWP 我有许多带有来自 App xaml 的颜色绑定的网格 主页 xaml
  • 错误:未找到:'dart:ui' import 'dart:ui' show lerpDouble;

    块引用 错误 未找到 dart ui 导入 dart ui 显示 lerpDouble 使用 F5 来运行代码 而不是 运行代码 按钮 右上角的三角形图标 因为 vscode 将运行您当前正在使用的文件而不是整个项目
  • 2 个日期值之间的随机时间和日期

    我正在尝试编写一个 php 脚本 或代码行 来回显两个日期之间的随机时间和日期 例如 2012 12 24 13 03 这将是我选择的日期2012年10月1日和2013年1月1日之间 有什么想法如何最好地做到这一点 提前致谢 简单 只需选择
  • 如何在 Angular/TypeScript 中组合两个 URLSearchParam?

    我有两个URLSearchParams物体 我想将这两个物体结合起来制作第三个 例如 我可以有 let params1 new URLSearchParams params1 set page one params1 set size hu
  • 将 Logstash json 消息分解为字段

    它有一个日志文件 用于存储带有时间戳和 json 消息的事件 例如 时间戳 foo 12 bar 13 我想将 json 部分中的键 foo 和 bar 分解为 Logstash 输出中的字段 我知道我可以将 Logstash 文件过滤器中
  • VS Code Python 中的“启动 Jupyter 服务器”

    我已经安装了带有 Python 扩展的 VS Code 我已经使用 Anaconda 发行版创建了一些 conda 环境 当我以交互模式运行任何 python 代码时 在下面的部分中显示 正在启动 jupyter 服务器 并且代码继续运行
  • 使用一个查询从 mysql 表创建带有 rowspan 的 html 表?

    我有个问题 假设我有一个具有以下结构的关系表 ClientInvoices id id client id invoice 1 1 1 2 1 2 3 2 3 4 3 4 5 1 5 您可以看到客户 1 有 3 张发票 每个客户可以有多个发
  • 在 SQLite.cs 中找不到类型或命名空间“Sqlite”

    我有一个使用 SQLite 的 Windows Phone 8 应用程序 该应用程序具有许多数据库功能 并包括一个 sqlite 数据库文件 该文件在运行应用程序时被复制到本地文件夹并进行访问 所有这些都没有问题 直到我第一次切换到发布版本
  • 无法使用带有 python 的 selenium 通过 sendkeys 将文件上传到 iframe 内的按钮元素

    环境 Python Selenium 我正在尝试将本地文件上传到上传文件按钮 首先 我尝试查看是否可以找到该元素并单击该按钮 我通过使用成功了 driver switch to frame upload frame driver find
  • 在 C++ 中声明基于函数参数的本地数组是合法的

    我从一本书中读到 以下 C 代码不应编译 void f int n int m int a n b n m 因为数组的大小不是在编译时确定的 但我尝试了一下 发现无论是全局函数还是成员函数 使用g 都可以编译成功 这在最近的 C 实现中是合