c++ - static_cast 文字 0 到 STL 中的其他类型

标签 c++ stl static-cast

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

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-arg int 的东西构造器;任何带有 1-arg 构造函数的类型都为 0可以隐式转换为。可能还有其他我没想到的。

假设iterator_traits解析为 std::iterator_traits , 然后 typename iterator_traits<Iterator>::difference_type*肯定是一个指向对象的指针类型,除非在一个不正确的特化 iterator_traits 的程序中除外。 .所以是的,类型转换有效。

如果你搞砸了并定义了difference_typevalue_type作为引用类型,或者根本不是类型,那么您在使用该代码时就会遇到问题。

关于c++ - static_cast 文字 0 到 STL 中的其他类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18713594/

相关文章:

c++ - 虚函数如何影响 static_cast?

c++ - 交换功能的好处?

c++ - 更新 std::set 以仅保留最小值

c++ - C++ 标准中的什么措辞允许 static_cast<non-void-type*>(malloc(N));去工作?

c++ - 确定线程使用的用户和系统时间

c++ - 使用一个空的 {} 来初始化一个 vector 是不同的吗?

c++ - 了解 static_cast

c++ - 将波形文件读入带符号的 float 组

c++ - cmake, boost::filesystem 链接错误 (undefined directory_iterator.operator!=)

c++ - 关于字符输入的问题