加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

每个开发者都应该了解的一些C++特性

发布时间:2019-05-25 06:31:19 所属栏目:建站 来源:机器之心编译
导读:作为一门编程语言,C++已经进化了很多。 当然,这些改变不是一夜之间发生的。曾几何时,C++缺乏活力,导致人们不太喜欢这门语言。 但是,当 C++标准委员会决定加快转变时,情况就不同了。 自 2011 年以来,C++已经成为一种不断发展的动态语言,而这正是很

编程人员倾向于尽可能减少程序的运行时间。因此如果某些操作可以让编译器来做,就可以减轻运行时的负担,从而提高时间效率。

每个开发者都应该了解的一些C++特性

上面的代码是 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 是一组各种数据类型的固定大小值的集合。

每个开发者都应该了解的一些C++特性

有时候,使用 std::array会比使用 tuple 更加方便。array 和普通 C 类型的 array 非常相似,但具有 C++标准库的一些特性。这种数据结构是 C++11 中新增的。

类模版参数推断

名字有点长。从 c++17 开始,参数推断也适用于标准类模版。此前,该特性只支持函数模版。

因此,

  1. std::pair<std::string, int> user = {"M", 25}; // previous 
  2. std::pair user = {"M", 25}; // C++17 

类型推断是隐式完成的。这对 tuple 来说变得更加方便。

  1. // previous 
  2. std::tuple<std::string, std::string, int> user ("M", "Chy", 25); 
  3. // deduction in action!  

如果你不熟悉 C++模版,那么上述特性可能对你来说不是很好理解。

智能指针

指针也可能并不好用。

由于 C++给编程人员提供了很大的自由度,有时这种自由可能反而会成为绊脚石。在多数情况下,都是指针在起反面作用。

幸运的是,C++11 引入了智能指针,它比之前的原始指针更加方便,可以通过适当地指针释放帮助开发者避免内存泄漏,同时也提供了额外的安全机制。

一开始我想在这篇文章中详细探讨一下智能指针,但显然重要的细节非常多,值得单开一篇来写,因此近期应该会出一篇相关文章。

原文地址:

https://medium.freecodecamp.org/some-awesome-modern-c-features-that-every-developer-should-know-5e3bf6f79a3c

【本文是51CTO专栏机构“机器之心”的原创译文,微信公众号“机器之心( id: almosthuman2014)”】

戳这里,看该作者更多好文

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读