我们可以创建一个大小为执行时常量的静态数组吗?

jsl*_*lap 6 c++ coding-style static-array

我们都知道静态数组的基本规则:

int size = 20;
char myArray[size];
Run Code Online (Sandbox Code Playgroud)

不合法.和.

const int size = 20;
char myArray[size];
Run Code Online (Sandbox Code Playgroud)

没关系

但是,这个怎么样.

int f(const int size)
{
    char myArr[size];
}

void main()
{
   f(2);
   f(1024);
}
Run Code Online (Sandbox Code Playgroud)

MSVC说它是一个错误,gcc似乎编译并执行它很好.

显然,它不便携,但应该被接受吗?

在那种情况下哪个编译器做对了?

此外,如果编译器允许它,是否应该通过良好的编程标准/实践进行授权?

编辑:我的想法是我想要速度的堆栈分配,但我不知道在编译时数组的大小.我知道还有其他一些解决方案,堆栈分配可能不是一个有意义的优化,但我认为这是一个有趣的用法.

GMa*_*ckG 9

不,C++没有可变长度数组.C99可以,并且gcc通过扩展允许它.

用一个std::vector.


假设您已经分析了应用程序并发现这是一个瓶颈,请编写一个自定义分配器,从堆栈中分配并使用它.如果没有,那就没问题了.

堆栈分配非常快,但这可能不会成为实际应用中的主要问题.(您应该有一个自定义内存管理方案,其性能将接近堆栈分配的速度.)