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似乎编译并执行它很好.
显然,它不便携,但应该被接受吗?
在那种情况下哪个编译器做对了?
此外,如果编译器允许它,是否应该通过良好的编程标准/实践进行授权?
编辑:我的想法是我想要速度的堆栈分配,但我不知道在编译时数组的大小.我知道还有其他一些解决方案,堆栈分配可能不是一个有意义的优化,但我认为这是一个有趣的用法.
不,C++没有可变长度数组.C99可以,并且gcc通过扩展允许它.
用一个std::vector.
假设您已经分析了应用程序并发现这是一个瓶颈,请编写一个自定义分配器,从堆栈中分配并使用它.如果没有,那就没问题了.
堆栈分配非常快,但这可能不会成为实际应用中的主要问题.(您应该有一个自定义内存管理方案,其性能将接近堆栈分配的速度.)