首页 > 代码库 > C++11 新特性之 decltype关键字
C++11 新特性之 decltype关键字
decltype关键字用于查询表达式的类型。与其他特性结合起来之后会有意想不到的效果。
decltype的语法是
decltype (expression)
实例:
#include <iostream> #include <typeinfo> using namespace std; int main() { int i; double d; float f; struct A { int i; double d; }; decltype(i) i1; cout << typeid(i1).name() << endl; //g++编译器下输出i ,对应int类型 decltype(d) d1; cout << typeid(d1).name() << endl;//输出d, double decltype(f) f1; cout << typeid(f1).name() << endl;//输出f,float A *a = new A; decltype(a->i) i2; cout << typeid(i2).name() << endl; //输出i, int decltype(a->d) d2; cout << typeid(d2).name() << endl; //输出d,double return 0; }
decltype在模板编程中的用处,举个例子,
template <class T, class U> ??? add(T t, U u) { return t+u; }问题在于无法知道t+u返回的实际类型
解决方法:利用__typeof__扩展编写相当难看的代码
template <class T, class U> __typeof__(*(T*)0 + *(U*)0) add(T t, U u) { return t+u; }
而在C++11中,我们可以使用auto关键字与decltype配合
#include <iostream> #include <typeinfo> using namespace std; template <class T, class U> auto add(T t, U u) ->decltype(t+u) { return t+u; } int main() { auto r = add(1, 1.0); cout << typeid(r).name() << endl; return 0; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。