【问题标题】:What does "C-style array" mean and how does it differ from std::array (C++ style)?“C 样式数组”是什么意思,它与 std::array (C++ 样式)有何不同?
【发布时间】:2011-08-20 04:44:22
【问题描述】:

我在阅读std::array and std::vector 时遇到了这个问题。

【问题讨论】:

    标签: c++ c


    【解决方案1】:

    C 样式数组只是一个“裸”数组 - 即未包装在类中的数组,如下所示:

    char[] array = {'a', 'b', 'c', '\0'};
    

    如果您将其用作数组,则为指针:

    Thing* t = new Thing[size];
    t[someindex].dosomething();
    

    而“C++ 样式数组”(非官方但流行的术语)正是您所提到的 - 像 std::vector(或 std::array)这样的包装类。这只是一个包装类(实际上是一个 C 风格的数组),它提供了方便的功能,如边界检查和大小信息。

    【讨论】:

    • 将 std::vector 视为 C++ 数组比 std::array 更常见
    • @Keith 没有严格的定义,但您可以将其用作具有几乎相同效果的产品。
    • @Seth:也许吧,但是认为数组实际上只是指针的普遍误解会导致很多问题。也许更清楚地说数组objects 不是指针objects。 (数组表达式通常——但不总是——衰减到指针表达式。)
    • @Keith 是的,你是对的。如果您认为这种差异对这个提问者来说足够重要,那么我将在我的回答中添加一个注释。我的目的是向他展示项目是如何在通常称为数组的结构中分组的,因为每当您尝试对数组执行几乎任何操作时,它都会变成一个指针,我认为也将它放在那里。我要补充一点,尽管向量也不是数组,严格意义上来说也没有像 C++ 样式数组这样的东西,但我想每个人都会知道我并没有给出这个术语的迂腐定义。
    • @Seth:例如,您可以拥有一个声明看似相同的变量和一个参数 (int arr[42];),但将 sizeof 应用于变量会得到数组大小,同时应用 @987654327 @ 参数给你一个指针的大小。通过将数组参数声明解释为指针声明并将大多数数组表达式转换为指针类型,该语言付出了很多努力,使其看起来像数组和指针是可互换的。这意味着您可以在大多数情况下将它们混为一谈——然后一些极端情况会咬你。
    猜你喜欢
    • 1970-01-01
    • 2012-05-20
    • 1970-01-01
    • 1970-01-01
    • 2018-11-02
    • 2022-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多