C++11之auto与decltype

auto 看介绍,auto实际上是在编译期间就对变量进行了类型推导,所以在程序的实际运行过程中不会对运行效率产生影响.因此可以说auto就类似一个占位符,只不过在编译期间被替换为实际的类型. auto最大的作用应该就是将代码变得简洁,易读.比如在使用迭代器的时候,通常需要写一大串的类型,而此时只需要使用auto即可: for (std::vector<int>::const_iterator itr = myvec.cbegin(); itr != myvec.cend(); ++itr) //使用auto for (auto itr = myvec.cbegin(); itr != myvec.cend(); ++itr) 但是最好不要在接收函数的返回值时使用auto,这会降低代码的可读性: sometype var = func_xxx(var); auto var = func_xxx(var); decltype decltype可以在编译期间确定表达式的类型,比如: int v1; … “C++11之auto与decltype”

Read More

C++11之constexpr

突然发现C++14都要出来了,然而我居然还没仔细的去了解C++11,飘了飘了… 在网上搜了下C++11的相关文章,感觉酷壳的这篇文章介绍的比较好. 然后发现constexpr这个C++11中新出现的关键字介绍比较少,于是就谷歌了一番,做了点总结. constexpr的含义为常量表达式,编译器在编译期间就能求值,因此只能用常量或者常量表达式来初始化.这是一种很强的约束,能保证程序的语义不会受到破坏,并且相比于宏而言,它更安全。 constexpr函数的限制有: 函数必须有返回值. 函数必须存在定义. 函数中仅能有一个return,但允许包含typedef、 using 指令、静态断言等. 只能调用其它constexpr函数或constexpr变量. constexpr函数可以使用递归: constexpr int recursion(int n){ return n > 10 ? recursion( n + 2 ) : 10; } 构造函数的常量表达式限制有: 1. 函数体必须为空 2. 初始化列表只能由常量表达式来赋值 class … “C++11之constexpr”

Read More