这段代码中的 begin() 指针是如何创建的?
How is the begin() pointer created in this code snippet?
template<typename T>
T* begin(Vector<T>& x)
{
return x.size() ? &x[0] : nullptr; // pointer to first element or nullptr
}
换句话说,编译器如何评估 return
语句以及 ?:
operators 在这个具体示例中如何工作?
编辑*:我不明白x.size()
部分. return x[0]
元素还不够吗?
*从评论中移出
如果向量不为空,returns存储在指针中的第一个元素的地址
整理问题下方的所有评论(应该在答案部分!)。
begin()
函数总是return指向模板类型T
的指针(即T*
)。问题是如果传递的 std::vector<T>
为空,它 return 应该怎么办?很明显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];
template<typename T>
T* begin(Vector<T>& x)
{
return x.size() ? &x[0] : nullptr; // pointer to first element or nullptr
}
换句话说,编译器如何评估 return
语句以及 ?:
operators 在这个具体示例中如何工作?
编辑*:我不明白x.size()
部分. return x[0]
元素还不够吗?
*从评论中移出
如果向量不为空,returns存储在指针中的第一个元素的地址
整理问题下方的所有评论(应该在答案部分!)。
begin()
函数总是return指向模板类型T
的指针(即T*
)。问题是如果传递的 std::vector<T>
为空,它 return 应该怎么办?很明显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];