gpt4 book ai didi

c++ - 为什么 value_type 函数在 SGI STL 中返回一个指针

转载 作者:行者123 更新时间:2023-11-30 03:35:34 25 4
gpt4 key购买 nike

我在学习 SGI STL 的迭代器特征时遇到了问题。

这是一个获取迭代器类型的函数。

template <class Iterator>
inline typename iterator_traits<Iterator>::value_type* value_type(const Iterator&){
return static_cast<typename iterator_traits<Iterator>::value_type*>(0);
}

这是一个调用value_type

的函数
template <class ForwardIterator, class T>
inline void uninitialized_fill(ForwardIterator first, ForwardIterator last, const T& x){
__uninitialized_fill(first,last,x,value_type(first));
}

template <class ForwardIterator, class T, class T1>
inline void __uninitialized_fill(ForwardIterator first, ForwardIterator last, const T& x, T1*){
typedef typename __type_traits<T1>::is_POD_type is_POD;
__uninitialized_fill_aux(first, last, x, is_POD());
}

我想知道为什么 value_type 函数必须返回 value_type* 而不是 value_type,我不明白为什么。在我看来,这两种解决方案似乎都可以。

希望有人能帮帮我,谢谢!

最佳答案

I wonder why the value_type function has to return value_type* instead of value_type, I cannot figure out why. In my opinion, it seems that both solutions will be OK.

请注意,uninitialized_fill 未命名该参数。我们只需要它的类型,不想在这里产生任何开销。

对于任意类型T,我们不知道如何构造它,或者它是否可复制或可移动。因此,直接传递 value_type 可能是不可能的,并且可能会导致完全不需要的拷贝以及无法消除的副作用。但我们确实知道我们可以从 0 构造一个 T*。因此,在这种情况下,使用指向 value_type 的零初始化指针是一种方便的 hack。


请注意,SGI 的实现非常古老,甚至早于 C++98,因此我建议您查看标准库的更现代的实现。

关于c++ - 为什么 value_type 函数在 SGI STL 中返回一个指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41214471/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com