【问题标题】:How does c++ handle an unknown size array allocation during compilation stage [duplicate]c ++如何在编译阶段处理未知大小的数组分配[重复]
【发布时间】:2016-07-11 00:10:41
【问题描述】:

我了解到 C++ 在编译阶段使用相对距离来提高代码的性能。例如,它知道两个局部整数的距离是 4。 我的问题是关于编译期间大小未知的数组

例如,编译器在以下代码中没有关于它应该为本地数组分配的内存量的信息: 它怎么知道局部变量local2和size的相对距离

#include <iostream>
using namespace std;

int main() {
    int size = std::getchar();
    int arr[size];
    int local2;
    return 0;
}

【问题讨论】:

  • 这是不是有效的 C++。
  • 编译成功ideone.com/SsvycN
  • @ldan 我没有说它不会编译。我只是说它不是有效的 C++。
  • 如果一个代码被编译并成功运行,它就是一个有效的代码。它可能不是一个好的代码,但它是有效的
  • @Idan - 许多 C++ 编译器兼作 C 编译器。因此,它们碰巧支持 C 中存在的功能。它们应该进行区分,这样您就无法尝试这样做,但大多数都不会。事实上,大多数编译代码时都打开了自己的扩展而不会发出警告。例如,在 g++ 中,您必须设置 std 标志,例如 -std=c++11。仍然那么你必须打开-pedantic。只有这样 g++ 才会告诉您您正在使用非标准构造,我不知道它会捕获这个特定的构造。你不能用成功编译来证明你的代码是有效的。

标签: c++ arrays


【解决方案1】:

它没有。这是一个编译时错误。您需要研究指针和动态内存分配/释放。 http://en.cppreference.com/w/cpp/memory/new/operator_new

基本上,对于单个实例,您会使用 new/delete。对于数组,您将使用 new[]/delete[]。不要将 new 与 delete[] 和 new[] 与 delete 结合使用。坏事会发生。

【讨论】:

    【解决方案2】:

    C++ 中不存在可变长度数组:Why aren't variable-length arrays part of the C++ standard?

    所以你的问题的答案是:编译器无从得知,不应该尝试。

    【讨论】:

      猜你喜欢
      • 2021-07-31
      • 2015-01-15
      • 2023-03-16
      • 2014-02-22
      • 2015-05-06
      • 2014-08-23
      • 1970-01-01
      • 2023-03-30
      • 2016-02-29
      相关资源
      最近更新 更多