1

我试图int在 C++ 中声明一个数组并发现了这个问题。以下代码在 g++ 编译器上运行良好,但在 Visual Studio 上编译失败。我在关注 Bruce Eckel 并找到了这段代码。

#include<iostream>

int main()
{
    const int j = std::cin.get();
    char buf[j];
}

我理解,只保留j一个将是一个问题。int由于在运行时的值j将是 const,因此程序应该被编译。如果我在任何地方错了,请纠正我。

4

4 回答 4

3

由于 的值jconst在运行时,程序应该被编译。

不,这里的const-nessj无关紧要。C++ 目前仅支持静态大小的 C 数组。它的大小必须是编译时常量。

如果您想要一个动态大小的数组,请使用std::vector.

g++ 默认编译它的事实有点不幸(为了兼容性)。您应该-pedantic在使用 g++ 时使用该标志来确保未启用此类编译器扩展(使用编译器扩展本身当然还不错,但在这种情况下并没有任何优势)。

于 2013-09-20T14:50:52.890 回答
2

可变长度数组是 C99 功能gccclang都支持它们作为 C++ 中的扩展,但 Visual Studio 从未这样做过,即使他们最近添加了对 C99的支持,但它在 C++ 中不支持

由于您正在使用C++进行开发,除非您有充分的理由不使用它,那么std::vectorstd::string就足够了。

于 2013-09-20T14:48:26.023 回答
2

您正在尝试将其定义buf变长数组。这是g++作为非标准扩展支持的 C(不是 C++)的一个特性。显然您的其他编译器不支持它。

我建议buf变成std::vector<char>(或确实std::string?)

于 2013-09-20T14:48:34.790 回答
0

我有同样的问题。创建一个长度存储为变量的数组似乎非常困难。我所做的是创建一个附加功能:

void Class:: initMyArray(const int size) {
    myArray = new int[size]
}

现在,您只需调用该函数并为其提供变量。我不确定这是否是一个合适的解决方案(我不是 C++ 专家)。

于 2015-03-25T17:52:27.463 回答