static_cast literal 0到STL中的其他类型

时间:2013-09-10 08:04:59

标签: c++ stl static-cast

哪种类型可以投射到?指针,数字变量。还有其他人?下面的演员会安全吗?

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);
}

1 个答案:

答案 0 :(得分:1)

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

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

如果你搞砸了并将difference_typevalue_type定义为引用类型,或者根本没有定义类型,那么你就会遇到代码问题。