C++11 封装小觑:从 std::array 看 C++11 风格

一、引言

最近也正在第二次刷《C++ Primer 5th》这本书,为什么要第二次刷呢?是因为自己仍然写不出自己满意的 C++11 风格的代码。

那么这个有点“玄乎其玄”的 C++11 风格到底是什么呢?

这是一个很大的话题,这里不予而且我也没有能力去阐述,我只能以我自己看到的一点点小细节来揣测大神们在设计 C++11 的一点点想法。

二、C++11 为什么要设计一个 std::array?

我们打开 C++在线手册,可以看到里面的标准库里,有一个非常奇怪的容器:std::array

也许我们用惯了 std::vector,亦或者std::string,对于std::array实在是陌生得紧。来,让我们看看在线手册说了什么:

std::array是固定元素个数的容器。
此容器的语义与相应C数组的语义相同。容器array<T,N>的大小等于相应C数组T[N]的大小,且性能也与C数组相同。但是它提供了C++标准容器的相应特性,如可以查询容器大小,支持复制,支持随机迭代器等等。

也就是说,std::array 是一个语义和性能上都与 C 中的数组一样的容器。

那么,C++11 为什么要单独设计一个 std::array?

这个问题也许很难有个答案,但是我这里想做出一些自己的理解:

  1. 首先,我认为此举是为了倡导脱离 C 风格的编程习惯
    为什么这么说?C++ 的编程风格有多少种无法计算,但是最主流的有四种(说法来源于《C++ Primer 5th》前言):

    • C 风格的 C++
    • 面向对象的 C++
    • 面向泛型的 C++
    • 基于组件的 C++

    也就是说,C++ 的编程风格实在太多太多。而正是这一点饱受诟病。C++11 在试图做什么呢?它首先想要倡导一个良性的编程风格,至少,对于我这种由 C 入门的人,思维还是 C 的面向过程的思维的人,如何让我们这些人从容而且正确的使用 C++11 ?

    也就是说,C++ 的去 C 化。

    当我们敲出了如下的代码时:

    int a[10];

    我们思考的是什么?是简简单单的一个指向了 10 个 int 类型的存储空间的数组指针 a ,其实就是这样的思维,导致我们仍然无法脱离 C 的影响。我们还在考虑底层的事情,而当我们写出了如下的代码的时候:

    std::array<int, 10> a;

    我们或许思考的是,我们使用了一个数组容器,它的存储类型是 int,它有 10 个元素,仅此而已。这是一种思维上的转变,也是一种进步,或者说,是 C++11 的设计者想要看到的。

  2. 其次,在线参考手册里也说了,提供了 C++ 标准容器的相应特性
    也就是说,既然是容器,就会有对于容器的一些操作,就可以封装一些方法。

    这也是非常容易理解的 stl 的一些理念。

    在学习 stl ,我们在思考什么?我们看数据都是容器,操作数据都是迭代器或者算法,这就是一种进步,就是一种设计上的先导成熟。

三、让我们一起写最美丽的 C++11 风格代码吧

代码风格是一种非常主观的东西,但是也非常重要。

我希望我能写出来一手漂亮的 C++11 风格的代码。

To be Stronger!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值