美文网首页程序员让前端飞Web前端之路
闲聊c/c++:对龙珠手游曝光的一段代码理解

闲聊c/c++:对龙珠手游曝光的一段代码理解

作者: 随风而行之青衫磊落险峰行 | 来源:发表于2017-11-20 21:58 被阅读335次

本篇是我简书第100篇文章,就留给C++(最爱)吧!

今天看到一条关于日本龙珠手游相关信息:

有玩家发现,自己手游画面上显示的抽蛋赔率和别人的不一样,官方贴出源码做解释。

我们不关注这件事情本身,而是看看日本公司代码是如何的:

龙珠手游.jpg

从这段代码可以看出,日本公司还是满与时俱进的,已经使用了c++11及存储方面的相关技术:

  1. nullptr

  2. auto类型推导

  3. lambda函数

  4. shared_ptr智能指针

  5. 内存cache与数据库读写相结合(服务器端经典的配套)

其实从这段代码,可以了解蛮多东西的。

  1. 参数const std::vector<uint32_t>& masterCardIds,说明是传引用参数,const说明是只读参数,在函数体内不会被修改。

  2. 红色标注的代码1,该循环的目的看起来是检测缓存是否没有修改过,判断依据是masterCardIds.size() == exists的话,就直接return results,此时的results都是从缓存(_cardDataCache.fetch而来)

  3. 如果缓存被修改过(数量不一致),则从数据库进行查找,查找后将结果_cardDataCache.store到缓存中,并返回查找后的数据集results(红色代码段2)

  4. 该c++函数是cons成员函数,关于const函数,有兴趣可以查一下(c++中const的含义和用途可是非常丰富的)

  5. 函数返回值是CardDatas,而内部表示results却是std::vector<CardDataPtr>,因此唯一合理解释是:
    typedef CardDatas std::vector<CardDataPtr>

  6. 既然是传vector,为什么不用引用参数进行数据返回,这样可以避免拷贝构造。因为没有提供该函数调用代码,猜测在调用时使用std::move进行右值引用C,消除掉不必要的拷贝构造。

C++是一门非常有深度的语言,而C++11是一门新的C++语言!!

龙珠.jpg

相关文章

网友评论

    本文标题:闲聊c/c++:对龙珠手游曝光的一段代码理解

    本文链接:https://www.haomeiwen.com/subject/ddybvxtx.html