本篇是我简书第100篇文章,就留给C++(最爱)吧!
今天看到一条关于日本龙珠手游相关信息:
有玩家发现,自己手游画面上显示的抽蛋赔率和别人的不一样,官方贴出源码做解释。
我们不关注这件事情本身,而是看看日本公司代码是如何的:
龙珠手游.jpg从这段代码可以看出,日本公司还是满与时俱进的,已经使用了c++11及存储方面的相关技术:
其实从这段代码,可以了解蛮多东西的。
-
参数const std::vector<uint32_t>& masterCardIds,说明是传引用参数,const说明是只读参数,在函数体内不会被修改。
-
红色标注的代码1,该循环的目的看起来是检测缓存是否没有修改过,判断依据是masterCardIds.size() == exists的话,就直接return results,此时的results都是从缓存(_cardDataCache.fetch而来)
-
如果缓存被修改过(数量不一致),则从数据库进行查找,查找后将结果_cardDataCache.store到缓存中,并返回查找后的数据集results(红色代码段2)
-
该c++函数是cons成员函数,关于const函数,有兴趣可以查一下(c++中const的含义和用途可是非常丰富的)
-
函数返回值是CardDatas,而内部表示results却是std::vector<CardDataPtr>,因此唯一合理解释是:
typedef CardDatas std::vector<CardDataPtr> -
既然是传vector,为什么不用引用参数进行数据返回,这样可以避免拷贝构造。因为没有提供该函数调用代码,猜测在调用时使用std::move进行右值引用C,消除掉不必要的拷贝构造。
C++是一门非常有深度的语言,而C++11是一门新的C++语言!!
龙珠.jpg
网友评论