每个开发者都应该了解的一些C++特性(2)
编程人员倾向于尽可能减少程序的运行时间。因此如果某些操作可以让编译器来做,就可以减轻运行时的负担,从而提高时间效率。 上面的代码是 constexpr 的一个常见例子。 由于我们声明 fibonacci 计算函数为 constexpr,编译器会在编译时预先计算 fib(20) 的值。所以编译结束后,它可以把 const long long bigval = fib(20) 替换为 const long long bigval = 2432902008176640000; 需要注意的是,传递的参数是 const 值。这是声明为 constexpr 的函数非常重要的一点,传递的参数同样要是 constexpr 或者 const。否则,该函数会像普通函数一样执行,即不会在编译时预先计算。 变量也同样可以是 constexpr。这种情况下,你应该可以猜到,这些变量同样也是编译时计算的。否则,会出现编译错误。 有趣的是,在之后的 c++17 中,又引入了 constexpr-if 和 constexpr-lambda。 tuple 和 pair 非常相似,tuple 是一组各种数据类型的固定大小值的集合。 有时候,使用 std::array会比使用 tuple 更加方便。array 和普通 C 类型的 array 非常相似,但具有 C++标准库的一些特性。这种数据结构是 C++11 中新增的。 类模版参数推断 名字有点长。从 c++17 开始,参数推断也适用于标准类模版。此前,该特性只支持函数模版。 因此,
类型推断是隐式完成的。这对 tuple 来说变得更加方便。
如果你不熟悉 C++模版,那么上述特性可能对你来说不是很好理解。 智能指针 指针也可能并不好用。 由于 C++给编程人员提供了很大的自由度,有时这种自由可能反而会成为绊脚石。在多数情况下,都是指针在起反面作用。 幸运的是,C++11 引入了智能指针,它比之前的原始指针更加方便,可以通过适当地指针释放帮助开发者避免内存泄漏,同时也提供了额外的安全机制。 一开始我想在这篇文章中详细探讨一下智能指针,但显然重要的细节非常多,值得单开一篇来写,因此近期应该会出一篇相关文章。 原文地址: https://medium.freecodecamp.org/some-awesome-modern-c-features-that-every-developer-should-know-5e3bf6f79a3c 【本文是51CTO专栏机构“机器之心”的原创译文,微信公众号“机器之心( id: almosthuman2014)”】 戳这里,看该作者更多好文
(编辑:ASP站长网) |