回忆C++
内联函数
内联函数适用于函数较为短小的情况。
内联函数存在的意义是:提高程序运行效率。
内联函数的缺点:如果一个内联函数太长且频繁调用,会导致生成的可执行程序较大。
静态链接库会被嵌入到生成的可执行程序中,如果很多程序都依赖同一个静态链接库,那么应该把这个静态链接库做成动态链接库。这样就能够减少程序所占内存。
静态链接库比动态链接库效率更高,且不存在依赖问题。如果动态链接库有不同的版本,那么必须为动态链接库引入版本管理才能让两个程序正常运行。
实际上,现代编译器已经自作主张地在时间和空间之间找到了平衡:即便你声明了一个内联函数,这个函数不一定真的会发生内联操作;即便一个函数没有声明为内联函数,这个函数也有可能变成内联。一个函数是否内联,是由编译器决定的。
对于类,如果把函数实现写在类的内部,那么这个函数默认会被加上一个inline,但是实际上它不一定会发生内联。
C++最佳实践
把C++当做Java来写,所有的文件都是.hpp文件。每个hpp文件中包含多个类定义,把类的函数声明跟函数实现放在一起。
不要使用静态函数和静态成员变量,而应该使用单例。
函数默认参数
Python达到了灵活性的极致,Python的默认参数是无序的,C++的默认参数是有序的。
Java完全放弃了函数默认参数,真正做到了一个函数只做一件事。但是Java中包含大量的函数重载,通常会提供一个大而全的函数,然后重载一堆函数去调用这个大而全的函数。
C++中的函数默认参数跟Python相比略微单薄,但是一定程度上能够减少函数重载的个数。
在设计C++时,需要权衡函数参数的优先级,合理对函数参数进行排序。
函数重载
C语言不支持函数重载,C++支持函数重载。
C++函数重载的原理是把函数的名字用它的参数类型进行命名,例如int f(int,int)会变成f_int_int。
函数重载只跟入参有关,跟返回值无关。
C++的函数和C语言的函数编译之后的名字是不一样的,这是二者的唯一区别。
extern “C”这种写法就是为C++函数重载而生的。
C++本身就是一个复杂的程序
如果把编程语言比作人,C++是一个英雄。它尝试了很多别人不敢尝试的东西,在艰难的假设之中砥砺前行、永不言弃。
C++勇敢面对各种假设:必须有运算符重载,必须有多继承等。
C++本身就是一个应用程序。
回忆C++的更多相关文章
- 最近这两天看了关于H5游戏开发的一个教程,实践很短暂,看了很多理论的东西,现在呢也只是想回忆回忆关于EUI的部分知识吧
首先我了解了什么是Egret: Egret中文就是白鹭的意思,Egret是一套H5游戏开发的软件.(纯粹属于个人理解) 其次我对以下几款软件的相关知识做了些了解: Egret Engine(引擎),E ...
- 『U3D学习』破坏神回忆图<一>任务系统
学习资料:siki老师<泰斗破坏神> 联系QQ:1790555618 功能描述:任务面板内容生成,角色进行任务,自动寻路到指定地点. 从今天起,本人会发学习回忆图,先总结开发阶段功能,后续 ...
- Web Service学习小结(概念性回忆)-希望你们会喜欢
Web Service的出现带来了很多系统工程直接相互的调用.无疑让代码的隐藏得到了好的封装. Web Service 它的主要的组成要素: SOAP:(Simple Object Access P ...
- cocos2d回忆
凭借自己的回忆想想看自己都学到了那些知识,这是小学的时候当初中老师的外公给我说的,现在想想,CCDirector,CCNode,CCScene,CCSprite这几个类,然后是坐标,锚点,CCNode ...
- 【转】阿里2015校招面试回忆(成功拿到offer)
原文转自:http://blog.jobbole.com/78722/ 1. 引言 继上次<百度2015校园招聘面试题回忆(成功拿到offer)>文章过后,大家都希望除了题目之外,最好能给 ...
- noi2015的回忆和教训
前几天偶然打开了bzoj的rank list,突然发现——我竟然掉出了第一版!!! 自从我5月还是6月刷进第一版之后,我曾经天真的以为大概半年之内我还能保留在第一版内吧. 结果仅仅短短的4个月,我就已 ...
- 网易游戏QA工程师笔试回忆-2012.9【个人题解】
========================转帖======================== 网易游戏QA工程师笔试回忆-2012.9 刚刚从武大回来,趁热回忆下题目,给以后的XDJMs参考. ...
- Google永远不可能回到国内,只能是回忆
今天早上在微博上无意看 [谷歌翻译App在大陆地区恢复无障碍使用]这篇文章,不知不觉就点进去看一下,内心还是比较兴奋,为什么兴奋说不清楚.或许我们是真的喜欢Google的产品. 回想2010年Goog ...
- 观《IT培训行业揭秘》触发北大青鸟回忆
在园子里看到这篇文章<IT培训行业解密(六)>时,挺有感触,回忆顿时涌上心头: 我想起了当年单纯的我们因为各自的原因来到北大青鸟,或因前途迷茫而选择想找一条出路,或因父母的信息闭塞而想给我 ...
- 2017京东校招面试回忆(已成功拿到offer)
一面 24日 晚上5:30-6:40 1 先说自己熟悉的领域 2 list的实现有什么? arraylist1.6 1.7区别 底层 linkedlist 底层是怎么实现的 单向还是双向 ...
随机推荐
- webpack代码分离CommonsChunkPlugin插件的使用(防止重复)
1.webpack.config.js中添加: const path = require('path'); + const webpack = require('webpack'); const HT ...
- Android 布局渲染流程与卡顿优化
文章内容概要 一.手机界面UI渲染显示流程 二.16ms原则 三.造成卡顿的原因 四.过度绘制介绍.检测工具.如何避免造成过度绘制造成的卡顿 一.手机界面UI渲染显示流程 大家都知道CPU(中央处理器 ...
- switch...case...语句分析(大表跟小表何时产生)
一.switch...case...的格式 switch(表达式) { case 常量表达式1: 语句; break; case 常量表达式2: 语句; break; case 常量表达式3: 语句; ...
- Shell命令-搜索文件或目录之whereis、locate
文件及内容处理 - whereis.locate 1. whereis:查找二进制命令,按环境变量PATH路径查找 whereis命令的功能说明 whereis 命令用于查找文件.该指令会在特定目录中 ...
- ARM 寻址方式
寻址方式有 9种 1.寄存器 2.立即数 3.寄存器位移 4.寄存器间接 5.基址 6.多寄存器 7.堆栈 8.块拷贝 9.相对 1. MOV R1,R2 R1 = R2 2. MOV R0,#0x1 ...
- golang数据结构和算法之CircularBuffer环形缓冲队列
慢慢练语法和思路, 想说的都在代码及注释里. CircularBuffer package CircularBuffer const arraySize = 10 type CircularBuffe ...
- Python常见异常及常用单词翻译
Python常见异常及常用单词意思 AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x IOError 输入/输出异常:基本上是无法打开文件 ImportE ...
- mysql 插入表情数据报错
mysql 插入表情数据报错 1.编码类型改成:utf8mb4 2.连接类型也要改成:utf8mb4_general_ci 3.在每个保存的前面执行一次 self.cursor.execute('SE ...
- C++ 标准库 std::find 查找
参见:https://en.cppreference.com/w/cpp/algorithm/find 查找指定字符/数字等. #include <iostream> #include & ...
- luoguP2824 [HEOI2016/TJOI2016]排序(线段树分裂做法)
题意 所谓线段树分裂其实是本题的在线做法. 考虑如果我们有一个已经排好序的区间的权值线段树,那么就可以通过线段树上二分的方法得到第\(k\)个数是谁. 于是用set维护每个升序/降序区间的左右端点以及 ...