此代码按预期工作:
&tab[0]
但我不确定当向量为空时将const unsigned char*
视为null是否合法。
我期待的是{{1}}为空,而不是向量是否为空。
这样我才能将它传递给接受{{1}}
的函数答案 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]
的值有任何保证,我无法回忆,但这对您编写的代码并不重要。