std::is_convertible 判断类型转换


目录
  • 简介
  • class template 声明
  • 示例
  • 参考

C++ 11知识点:std::is_convertible

简介

is_convertible用于判断是否可以转换:第一个模板参数的类型是否可以转换为第一个模板参数的类型。

如果To, From都是基本类型,那么可以隐式转换。
如果To是基类,From是子类,那么From可以转换为To。

class template 声明

template
struct is_convertible;

is_convertible 继承自integral_constant,如果能转换,可以从is_convertible<>::value萃取到true;如果不能转换,则萃取到false。

示例

A是B基类,B可以转换为A,反之不行。

// is_convertible example#include #include 

struct A { };
struct B : A { };

int main() {
  std::cout << std::boolalpha; /* 输出流将bool输出true/false, 而不是1/0 */
  std::cout << "is_convertible:" << std::endl;
  std::cout << "int => float: " << std::is_convertible::value << std::endl;
  std::cout << "int = >const int: " << std::is_convertible::value << std::endl;
  std::cout << "A => B: " << std::is_convertible::value << std::endl; /* A不能转换为B */
  std::cout << "B => A: " << std::is_convertible::value << std::endl; /* B能转换为A */
  return 0;
}

输出

is_convertible:
int => float: true
int => const int: true
A => B: false
B => A: true

参考

http://www.cplusplus.com/reference/type_traits/is_convertible