c++相关的类型推导

c++11和boost库增加许多关于类型推导(编译期)的关键字和类型, 用好这些机制, 对于编写项目的一些组件帮助颇大。正所谓工欲善其事,必先利其器。

1、初始化某种类型的变量

auto var = expression;

2、推导表达式类型

decltype(expression) var;

decltype很重要的一个用途就是配合auto使用, 推导函数的返回值。

template<class U, class V>

auto Multiply(U u, V v) -> decltype(u*v) // Note -> after the function bracet.

{

  return u*v;

}

需要注意的是, decltype不会执行表达式而auto会。

3、推导一个调用表达式的返回类型

result_of是boost库中的一个小组件, 使用的时候需要

#include <boost/utility/result_of.hpp>

附带说一下, c++对于RTTI(Run Time Type Identification)的支持, 提供了两个操作符:dynamic_cast和typeid,一个类型:type_info。

msdn对于typeid的说明:

typeid操作符的返回结果是名为type_info的标准库类型的对象的引用。 type_info在typeinfo头文件中定义:

class type_info {
public:
  virtual ~type_info();
  booloperator== (const type_info& rhs) const;
  booloperator!= (const type_info& rhs) const;
  bool before (const type_info& rhs) const;
  constchar* name() const;
private:
  type_info (const type_info& rhs);
  type_info& operator= (const type_info& rhs);
};


dynamic_cast作用:将一个基类对象指针(或引用)cast到继承类指针,dynamic_cast会根据基类指针是否真正指向继承类指针来做相应处理,


即会作一定的判断。


对指针进行dynamic_cast,失败返回null,成功返回正常cast后的对象指针;


对引用进行dynamic_cast,失败抛出一个异常,成功返回正常cast后的对象引用。 注意:dynamic_cast在将父类cast到子类时,父类必须要有虚函数。


dynamic_cast会用到RTTI技术,因此需要启动“运行时类型信息”这一选项