0

0 可以转换为哪种类型?指针,数字变量。还有其他人吗?下面的演员阵容会安全吗?

ps:摘自迭代器的STL实现

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

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

1 回答 1

1

各种指针,包括指向函数的指针、指向成员的指针、指向成员函数的指针;算术类型;任何带有 1-argint构造函数的东西;任何带有 1-arg 构造函数的东西都采用0可以隐式转换为的类型。可能是我没有想到的其他事情。

假设iterator_traits解析为std::iterator_traits, 那么typename iterator_traits<Iterator>::difference_type*肯定是一个指向对象的类型,除非在程序中对 . 有不正确的特化iterator_traits。所以,是的,演员工作。

如果您搞砸了并定义为引用类型,difference_type或者value_type根本不是类型,那么您将遇到该代码的问题。

于 2013-09-10T08:18:14.107 回答