我如何能够在 C++ 中声明一个在运行时确定的可变长度数组?

2024-03-18

请检查这段代码,它编译并运行得非常好。 问题是,当我开始学习 c++ (turbo c++) 时,我从来无法将任何类型的数组声明为 ..

datatype var[variable_set_at_runtime];

我想当然地认为这在最新的 gcc 编译器中是不可能的...但令人惊讶的是这是可能的...

所以我的相关问题是,那么新的运营商需要什么?

我知道 new 运算符做了很多事情,包括在运行时动态分配堆中的内存、返回该资源的地址......等等。

我觉得有什么区别是我的代码在堆栈上动态分配内存,而 new 在堆上分配内存?这是唯一的区别吗...

写完这样的东西后我真的很惊讶,因为当我开始学习 C++ 时我无法做到这一点......添加到它我也可以对自定义数据类型执行此操作...:-O

#include<iostream>
using namespace std;
struct A
{
    int a;
    int b;
};
int main()
{
    int a;
    cin>>a;
    int ch[a];
    for(int i=0;i<a;i++)
        ch[i]=i+1;
    for(int i=0;i<a;i++)
        cout<<"\n\nch=="<<ch[i];
    A obj[a];
    cin>>obj[a-1].a;
    cin>>obj[a-1].b;
    cout<<"\n\n obj.a,obj.b=="<<obj[a-1].a<<" , "<<obj[a-1].b;
}

请透露一些信息..

Thanks.


我想当然地认为这 在最新的 gcc 中不可能 编译器......但令人惊讶的是这是 可能的...

它在 C 中是合法的,但在 C++ 中不合法。 GCC 可能允许它,具体取决于编译器标志,但如果您将代码编译为严格的 C++(您应该这样做),则不允许动态长度数组,并且您必须使用new。 (我很惊讶还没有人提到这个小细节)

除此之外,另外两个很大的区别是:

  • 当栈上的数据超出范围时会自动清理
  • 通常只为堆栈分配 1MB 之类的空间。大型数据结构应该放在堆上。

但实际上,最重要的一点是第一点——它不是有效的 C++。 (正如 Neil 指出的,它在 C++0x 中也无效。没有计划将其添加到 C++ 中)

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

我如何能够在 C++ 中声明一个在运行时确定的可变长度数组? 的相关文章

随机推荐

  • 在文件中写入特殊字符

    我正在尝试将数据写入 eps 文件 这是我的代码 header Content Type text html charset utf 8 var echo var file test eps file put contents file v
  • 如何在 VS Code 中使用 Windows 内置的 OpenSSH ssh-agent,而不是 Git bash 的?

    我在 Windows 上运行 OpenSSH 使用自秋季 秋季创作者更新以来包含内置 OpenSSH https learn microsoft com en us windows server administration openssh
  • 迁移 NDB 模型属性的正确方法

    我目前在 NDB 中有一个模型 我想更改属性名称而不必接触 NBD 假设我有以下内容 from google appengine ext import ndb class User ndb Model company ndb KeyProp
  • Neo4j 索引创建失败

    我目前正在了解 Neo4j 和图形数据库的功能 我还做了neo4j附带的电影教程 现在我必须处理一个大型数据库 135 GB 500 个 mio nodes 950 个 mio relationships 并且想要为特殊类型的节点添加索引
  • 为什么 this 不能作为成员函数中的默认参数传递?

    我试图将当前的 le ngth 值作为默认参数作为函数参数传递 但编译器显示错误 在此上下文中不得使用 this 谁能告诉我我犯了什么错误 class A private int length public A void display i
  • 在node.js中,全局对象(或头对象)有名称吗?

    如果环境是浏览器 那么我们可以使用 测试this关键字指向window对象 也是全局对象 或者有些书称其为 头对象 如果在node js中 有没有类似这样的名字呢 window 以便 console log this globalObjec
  • 确定线斜率变化的位置(算法)

    如果你绘制下面的数字 你会得到一个 波动性微笑 数字遵循一个线性斜率 左斜率 然后更改为 遵循另一个线性斜率 右斜率 我有几组这样的数据 想知道斜率在哪里 变化 笔记 斜率变化通常发生在点之间 不知道有多少个点有左斜率 有多少个有 正确的斜
  • java 如何打开另一个目录中的文件?

    如何打开不在当前目录中但在另一个目录中的文件 例如 我有一个文件夹 F test 我的文件位于 F test test2 doit txt 和 D test3 doit2 txt 创建文件对象时在参数路径中输入的内容如下 File f ne
  • XSLT - 将前同级元素与当前节点元素进行比较

    我有这个 XML 文件
  • JavaFX 如何滚动 ScrollPane 以使节点位于视口中间?

    我必须创建显示当前时间的时间线 我正在使用 AnchorPane 并将添加的行放置在 ScrollPane 中 我需要模拟1天 滚动窗格宽度为 2880px 每60px为一小时 我的限制是 前一天 12 小时 第二天 12 小时 移动我的线
  • 如何为BackgroundService传递参数?

    我阅读了有关 ASP net core 2 2 的内容 并找到了有关通用主机的参考资料 我尝试在示例下使用 backgroundService 创建控制台应用程序 https github com aspnet AspNetCore Doc
  • 一个值在数组中存在多少次[重复]

    这个问题在这里已经有答案了 我想做的第一件事是找出我在输入中输入的数字是否存在于数组中 这有效 我想做的第二件事是找出它存在的次数 我在这里走的路正确吗
  • 如何将 Flot 与 AngularJS 集成?

    我对 Angular 和 Flot 很陌生 但对 Jquery 和 Javascript 很熟悉 我对如何将 Flot 图表绑定到 Angular 数据模型有点困惑 因为 Flot 是一个 JQuery 插件 我四处搜寻 但未能找到示例 我
  • 库存管理数据库设计

    我正在为我的公司创建一个内部网 我们希望在其中进行库存管理 我们销售和租赁报警系统 我们希望很好地了解哪些产品仍在我们的办公室中 哪些产品已出租或出售 何时出租或出售等 目前我想到了这个数据库设计 每次我们创建新合同时 该合同都与地点或商品
  • 如何扩展Generator类?

    我尝试过滤生成器 并期望这种通用功能必须在 JavaScript 中的任何位置定义 因为它是为数组定义的 但我找不到它 所以我试图定义它 但我无法扩展内置发电机 我有一个示例生成器 function make nums let nums n
  • NSFetchRequest 未捕获属性已更改的对象

    我在 Mac Os X 10 6 上使用 SQL 存储时遇到了 Core Data 的奇怪问题 我有一个NSManagedObject子类称为Family有属性name和一段关系personList连接到另一个NSManagedObject
  • 必须从 UI 线程调用 getText() 方法

    必须从 UI 线程调用 getText 方法 请帮忙 我是 android studio 的初学者 在网上找到了这些代码 但无法弄清楚 我真的很感激 public class MainActivity extends AppCompatAc
  • Django password_reset 支持 html 电子邮件模板吗?

    在我看来 django 仅支持开箱即用的密码重置电子邮件的纯文本消息 我如何使用 html 模板来实现此目的 以下是如何进行覆盖 urls py url r user password reset YOUR APP views passwo
  • node.js - 代码保护?

    我想在下一个项目中使用node js 但我的老板不喜欢我们的竞争对手可以阅读源代码 有没有办法保护 JavaScript 代码 您可以使用 Node 的 NativeExtension 来完成此操作 你会有一个boostrap js为 js
  • 我如何能够在 C++ 中声明一个在运行时确定的可变长度数组?

    请检查这段代码 它编译并运行得非常好 问题是 当我开始学习 c turbo c 时 我从来无法将任何类型的数组声明为 datatype var variable set at runtime 我想当然地认为这在最新的 gcc 编译器中是不可