gpt4 book ai didi

用于定义数组大小的 C++ 变量表达式?

转载 作者:行者123 更新时间:2023-11-30 01:20:49 25 4
gpt4 key购买 nike

我是 C++ 的新手,我在学校的计算机上练习编码,所以我必须使用在线编译器 (www.CompileOnline.com)。我有一个由函数定义的变量,然后用于初始化数组,如下所示:

int var = function(a);

整数[变量];

此代码在网站上运行良好,但在 Visual Studio Express 2012 上出现错误:

C2057:预期的常量表达式

这是 Visual Studio 的问题吗?我读过这是一个 C++ 规则,但为什么它在网站上有效?感谢任何帮助,谢谢。

最佳答案

代码片段需要的特征称为 variable length arrays (VLA)。 C 或 C++ 语言对此功能的支持取决于编译器和标准版本。

  • C99 支持 VLA 作为标准。
  • 早于 C99 的版本(包括 C90)不支持 VLA 作为标准,但一些编译器可能将其实现为语言扩展。
  • C11 使 VLA 成为可选功能。
  • C++14 支持 VLA 的一种受限变体,称为动态数组
  • C++14 之前的版本(包括 C++11、C++03 和 C++98)不支持 VLA 作为标准,但一些编译器可能将其作为扩展实现。

特别是,GCC implements VLAs as a language extension for C90 and C++ ,显然 www.compileonline.com 使用 GCC 作为编译器(撰写本文时为 4.7.2 版)。没有任何版本的 Visual C++ 编译器实现 VLA。

Herb Sutter talks about C++14's dynamic array feature :

In the language, draft C++14 now allows stack-based arrays to have a size determined at run time:

void f(std::size_t n)
{
int a[n];

...

}

Note that this is not the same as C99 variable length arrays (VLAs), and that the C11 standard has made VLAs conditionally-supported so that they are no longer part of portable C required in a conforming C compiler. In particular, C++ explicitly not does support the following features from C99 VLAs which C++ feels are not desirable:

  • multidimensional arrays, where other than the top level has a runtime bound (in analogy, the array form of new expressions doesn’t support that either)
  • modifications to the function declarator syntax
  • sizeof(a) being a runtime-evaluated expression returning the size of a
  • typedef int a[n]; evaluating n and passing that through the typedef

如果您希望 C++ 代码可以在几乎所有 C++ 版本中运行,请考虑使用 std::vector相反:

#include <vector>

int main()
{
int var = function(a); // Assume function() has been defined.
std::vector<int> num(var); // Creates a vector with var number of elements.
// ...
int num1 = num[1]; // You can access elements in vectors just like arrays.
num[1] += 10;
// ...
}

关于用于定义数组大小的 C++ 变量表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18907139/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com