【问题标题】:C++ array Visual Studio 2010 vs Bloodshed Dev-C++ 4.9.9.2C++ 数组 Visual Studio 2010 与 Bloodshed Dev-C++ 4.9.9.2
【发布时间】:2011-08-16 13:58:20
【问题描述】:

此代码在 Bloodshed Dev-C++ 4.9.9.2 中编译良好,但在 Visual Studio 2010 中出现错误:表达式必须具有常量值。如何在用户输入数组大小后不使用指针创建数组?

#include <cstdlib>
#include <iostream>
using namespace std;

int main()
{
    int size = 1;
    cout << "Input array size ";
    cin >> size;
    int array1[size];
    system("PAUSE");
    return 0;
}

【问题讨论】:

    标签: c++ visual-studio arrays input dev-c++


    【解决方案1】:

    使用变量自动调整数组大小的能力是 C 的一部分,而不是 C++ 的一部分,并且是 GCC 似乎想要强加给我们所有人的扩展。而且 DevC++ 是 cr*p 的一个邪恶部分,尽管它在这里没有错。进行更改(这完全是 GCC 所做的)- 我无法想象您(或其他任何人)为什么要使用它。

    你真的应该用 GCC 编译你的 C++ 代码,并带有警告你这样的东西的标志。我建议至少使用 -Wall 和 -pedantic。

    【讨论】:

      【解决方案2】:

      使用std::vector 而不是数组(通常是个好主意):

      std::vector<int> array1(size);
      

      如果您关心的话,您看到的差异不是来自 Dev-C++ 本身,而是来自 gcc/g++。您使用的是 g++ 碰巧实现的 C++ 的非标准扩展,但 VC++ 没有。

      【讨论】:

      • 并且可以在 gcc 中通过在命令行中添加 -std=c++03-std=c++0x 来禁用它。但是这些在 Dev-C++ 中的 GCC 上不起作用,它是石器时代的,应该被活活烧掉。
      【解决方案3】:

      或者

      int array1 = new int[size];

      我相信也会起作用(距离我上次接触 C++ 已经一到三个月了)

      但实际上,如果使用 C++,请选择 std::vector,更加灵活。

      【讨论】:

      • 在发布主题之前再次触摸它。顺便说一句,不要投反对票。
      • downote 是我写的 - 你需要一个 int* array1 来存储 new 返回的指针。
      猜你喜欢
      • 2013-01-06
      • 1970-01-01
      • 1970-01-01
      • 2018-01-30
      • 1970-01-01
      • 2019-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多