根据https://en.cppreference.com/w/cpp/container/vector/data,如果大小为 0,则不保证底层指针为 nullptr
如果 size() 为 0,则 data() 可能会也可能不会返回空指针。
但这是否适用于没有元素的默认初始化 std::vector ?或者这只是简单地说明如果向量的所有元素都被删除,底层指针可能不会变成 nullptr?
考虑以下行:
std::vector<int> fooArr;
int* fooArrPtr = fooArr.data();
Run Code Online (Sandbox Code Playgroud)
是否保证fooArrPtr等于 nullptr?
Pet*_*ter 10
不。
该标准保证默认初始化std::vector等于零size(),但这并不要求data()返回nullptr。
标准中没有任何内容可以阻止(并且“不阻止”不等于“要求”)具有零.size()和非零的默认构造向量capacity()。在这种情况下,返回指向已分配内存的指针是可行的.data()(该指针将是非空的,但取消引用它仍然会具有未定义的行为,因为它.size()为零[并且分配的容量不需要初始化])。
如果要测试向量的大小是否为零,请使用.size()或.empty()。不要调用.data()并将结果与 进行比较nullptr。