orl*_*rlp 30 c++ standards stack dynamic-arrays
在C99这是合法的:
void f(size_t sz) {
char arr[sz];
// ...
}
Run Code Online (Sandbox Code Playgroud)
但是,这个 - 动态大小的堆栈数组 - 已经在C++中被删除了,而没有在C++ 11中看到返回.
AFAIK C++是在考虑到C兼容性的情况下制作的,所以我想知道必须有一些非常好的论据,不包括这个有用的功能,对吗?
我能想到的就是:
delete [])和慢堆分配.为了防止这种情况被关闭为"主观"或"不具有建设性",我正在寻找来自委员会成员的引用或者讨论谈论此事的讨论的链接 - 当然还有快速的SO综述的奖励积分.
而不是将其视为小马与仓鼠的讨论,将其视为一个历史问题,仅仅关注所考虑的优势和劣势(如果有的话).
编辑:正如James McNellis在下面的评论中所指出的,C++标准化可变长度数组之前存在C++.你可能会把我的问题读作:" 为什么没有,他们不会添加它? ".
Naw*_*waz 19
我认为,这是因为C++提供了卓越的解决方案:std::vector<T>和std::array<T,N>(C++ 11); 虽然后者不是动态的,但它优于原始数组.无论您通过向量或数组传递哪种函数,都可以随时了解大小.
由于C不能提供这些解决方案,C99提出了可变长度阵列(VLA).它与常规数组有同样的问题:它会在将其传递给函数时衰减为指针,并且您不再知道数组的大小.
正如Florian Weimer 在此问到的comp.std.c++那样,如果C++ 0x允许VLA,那么下面的代码意味着什么?
int vla[n]; //n is known at runtime!
std::vector<decltype(vla)> v; //what does this mean?
Run Code Online (Sandbox Code Playgroud)
当编译器的类型参数依赖于运行时已知的时,编译器如何在编译时实例化矢量模板?n
| 归档时间: |
|
| 查看次数: |
6865 次 |
| 最近记录: |