在此代码段中如何创建begin()指针?

时间:2019-07-20 10:04:19

标签: c++ pointers templates return conditional-operator

template<typename T>
T* begin(Vector<T>& x)
{
    return x.size() ? &x[0] : nullptr; // pointer to first element or nullptr
}

换句话说,在这个确切的示例中,编译器如何评估return语句以及?: 运算符的工作原理?

编辑 * :我不理解x.size()部分。返回x[0]元素还不够吗?

*已从评论中移出

2 个答案:

答案 0 :(得分:3)

整理问题下面的所有评论(应该在答案部分!)。

begin()函数始终将指针返回到模板类型T (即T*)。问题是如果传递的std::vector<T>为空,应该返回什么?显然nullptr

这意味着等同的if-else版本是:

if(x.size())    // size(unsigend type) can be inplicity converted to bool: true for +ve numbers false for 0 and -ve numbers
  return &x[0]; // return the address of the first element
else
  return nullptr; // return pointer poiting to null

请记住,std::vector提供了成员std::vector::empty。使用它会非常直观。

if(x.empty()) 
  return nullptr; // if empty
else
  return &x[0];

或类似问题,使用条件运算符:

return x.empty() ? nullptr : &x[0];

答案 1 :(得分:0)

如果向量不为空,则将地址返回到存储在指针中的第一个元素