查看一些示例代码并遇到一些零大小数组分配。我创建了以下代码片段来澄清我的问题
这是有效的代码:
class T
{
};
int main(void)
{
T * ptr = new T[0];
return 0;
}
它有什么用? ptr 有效吗?这个结构可移植吗?
C++标准中的5.3.4:
6 Every 常量表达式 in a 直接新声明符应为整数常量表达式 (5.19) 并计算为严格正值。这表达 in a 直接新声明符应具有具有非负值的整数或枚举类型(3.9.1)...
7 当值表达 in a 直接新声明符为零,则调用分配函数来分配一个没有元素的数组。
因此,您的代码分配一个数组,该数组在各个方面的行为都与 T 的任何其他数组一样(可以使用 delete[] 删除,作为参数传递,可能还有其他东西)。但是,它没有可访问的索引(即读取或写入 ptr[0] 会导致未定义的行为)。
在这种情况下,常量表达式和表达式之间的区别不在于实际表达式是否是编译时常量(显然是 0),而是它是否指定多维数组的“最后”维度。语法在 5.3.4:1 中定义。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)