访问指向空向量元素的指针是不确定的行为?

时间:2016-11-17 17:11:58

标签: c++

此代码按预期工作:

&tab[0]

但我不确定当向量为空时将const unsigned char*视为null是否合法。

我期待的是{{1}}为空,而不是向量是否为空。

这样我才能将它传递给接受{{1}}

的函数

2 个答案:

答案 0 :(得分:3)

我不确定你的意思是 unitialized(vector element)(uninitialized vector)元素,但你的例子不是。它是零元素的初始化向量。

a.operator[n]被定义为具有*(a.begin()+n)的语义,并且对于空向量使用begin = end,您将解除引用结束迭代器。行为未定义。

答案 1 :(得分:1)

您编写代码的方式肯定涉及未定义的行为,这是不好的做法,因为它访问未初始化的内存。

然而,这将是非常好和合法的:

std::vector<unsigned char> tab(1);
if(!&tab[0])std::cout<<"null";

即使tab[0]没有为其分配值,指针也有一个有效的内存部分指向。如果对tab[0]有任何保证,我无法回忆,但这对您编写的代码并不重要。