C++11 理解 (七) 之 类型推导

发布时间:2017-4-30 5:32:57 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"C++11 理解 (七) 之 类型推导",主要涉及到C++11 理解 (七) 之 类型推导方面的内容,对于C++11 理解 (七) 之 类型推导感兴趣的同学可以参考一下。

在标准 C++(和 C ),使用参数必须明确的指出其类型。然而,随着模版类型的出现以及模板元编程的技巧,某物的类型,特别是函数定义明确的回返类型,就不容易表示。在这样的情况下,将中间结果存储于参数是件困难的事,可能会需要知道特定的元编程程序库的内部情况。 C++11 提供两种方法缓解上述所遇到的困难。首先,有被明确初始化的参数可以使用 auto 关键字。这会依据该初始化子(initializer)的具体类型产生参数: auto someStrangeCallableType = boost::bind(&SomeFunction, _2, _1, someObject); auto otherVariable = 5; someStrangeCallableType 的类型就是模板函数 boost::bind 对特定引数所回返的类型。作为编译器语义分析责任的一部份,这个类型能够简单地被编译器决定,但用户要通过查看来判断类型就不是那么容易的一件事了。 otherVariable 的类型同样也是定义明确的,但用户很容易就能判别。它是个 int(整数),就和整数字面值的类型一样。 除此之外,decltype 能够被用来在编译期决定一个表示式的类型。举例: int someInt; decltype(someInt) otherIntegerVariable = 5; decltype 和 auto 一起使用会更为有用,因为 auto 参数的类型只有编译器知道。然而 decltype 对于那些大量运用运算符重载和特化的类型的代码的表示也非常有用。 auto 对于减少冗赘的代码也很有用。举例而言,程序员不用写像下面这样: for (vector<int>::const_iterator itr = myvec.cbegin(); itr != myvec.cend(); ++itr) 而可以用更简短的 for (auto itr = myvec.cbegin(); itr != myvec.cend(); ++itr) 这项差异随着程序员开始嵌套容器而更为显著,虽然在这种情况下 typedef 是一个减少代码的好方法。 decltype 所表示的类型可以和 auto 推导出来的不同。 #include <vector> int main() { const std::vector<int> v(1); auto a = v[0];// a 為 int 型別 decltype(v[0]) b = 0; // b 為 const int& 型別,即 // std::vector<int>::operator[](size_type)const 的回返型別 auto c = 0; // c 為 int 型別 auto d = c; // d 為 int 型別 decltype(c) e; // e 為 int 型別,c 實體的型別 decltype((c)) f = e; // f 為 int& 型別,因為(c)是左值 decltype(0) g; // g為int型別,因為0是右值 }

上一篇:汇编语言(王爽)第二章寄存器
下一篇:Linux分区和挂载(mount命令的学习)

相关文章

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。

好贷网好贷款