根据标准草案(23.3.6.4向量数据),data()指向底层数组,并且[data(), data() + size())
必须是有效范围:
T* data() noexcept;
const T* data() const noexcept;
1 Returns: A pointer such that [data(),data() + size()) is a valid range. For a non-empty vector,
data() == &front().
2 Complexity: Constant time
Run Code Online (Sandbox Code Playgroud)
但是如果向量是空的呢?当我构造一个零大小的向量时:
#include <vector>
#include <iostream>
int main() {
const int NUM = 0*10;
std::vector< double > v( NUM, 0.0 );
std::cerr << "V : "<< v.data() << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
MSVC 2010返回null,但在Linux(使用GCC 4.2.1和Intel 12.1)上,我得到一个非空地址.
是vector::data()
允许还是应该返回null?例如,一个实现可以执行默认大小的初始分配并返回一个(非空)指针吗?
编辑:几个答案集中在空范围的有效性.我完全同意.
我真的希望看到一个很好的引用或解释:是否允许 …