decltype应用场景:decltype多应用在泛型编程之中 template<typename T> class { typename T::iterator it; void func(T t) { it = t.begin(); //这里取它迭代器的首位置 } }; template<typename T> class { typename T::const_iterator it; void func(T t) { it = t.begin(); //这里取它迭代器的首位置 } }; 使用decltype,上面的代码可以写成 template<typename T> class { decltype(T.begin()) it; void func(T t) { it = t.begin(); //这里取它迭代器的首位置 } }; 实际上,标准库中有些类型都是通过decltype来定义的: typedef decltype(nullptr) nullptr_t; typedef decltype(sizeof(0)) size_t;