考虑
int main()
{
auto a = new int[0];
delete[] a; // So there's no memory leak
}
在复制初始化和删除之间,是否允许您读取处的指针a + 1?
此外,该语言是否允许编译器设置a为nullptr?
a + 1”时,以下代码是否为auto b = a + 1;未定义行为?(我认为是这样)。
0实际上是某些表达式的结果,直到运行时您才知道。由于new int[0]是安全的,因此可以省去一些分支/特殊情况的烦恼。试想一下,如果我是来初始化std::vector与std::vector<int> v(0);。
a肯定阅读(您当然不能取消引用)。