当前位置: 首页 > 编程日记 > 正文

【C++】Google C++编码规范(四):其他C++

引用参数

所有按引用传递的参数必须加上const;
这在Google Code上是一个硬性约定:输入参数是值参或const的引用参数,输出参数为指针,输入参数可以是```const`指针,但决不能是非const的引用参数,除非用于交换,比如swap();

右值引用

关于右值引用的建议是:只在定义移动构造函数和移动赋值操作时使用右值引用,不建议使用std::forward功能函数。可以使用std::move来表示将值哦那个一个对象移动到另一个对象,而不是复制到另一个对象。

函数重载

我的理解是:只有在一眼就能看出重载函数的参数不同,非常明显的想要表达给使用者意图的情况下使用重载,比如参数个数不同;
google的建议是:在函数名里添加参数信息,不要为了显摆会使用重载而使用重载。

缺省参数

google不建议使用缺省参数,除了以下三种情况:
1、构造函数;
2、.c文件里的静态函数或匿名函数等,只在局部文件里调用;
3、模拟变长数组;
不使用的原因是:缺省参数会干扰函数指针,尤其是在现有函数中添加了缺省参数,会改变它的类型,调用其地址时会报错。
我的一个经历是:在对同一个成员变量的初始化和使用函数中使用了缺省参数,但是缺省的值又不相同,造成初始化后的上下文和使用默认调用时不一致,不仔细就会出错。

变长数组和 alloca()

google不允许使用变长数组和alloca();
使用std::vectorstd::unique_ptr<T[]>来代替。
alloca函数是在栈上分配内存,有时移植代码时会出现意想不到的问题。

友元

google:允许合理的使用友元类及友元函数;
比如:只允许另一个类访问该类的私有成员时,可以使用友元;而不用将私有成员改成公有成员public;在单元测试时,会经常用到。

异常

google明确禁止使用异常,因为它以前的代码都没有异常,如果在新项目中使用异常,需要重新实现以前的代码;
但是构造函数失败只有异常可以处理,还是根据自己的情况决定把。

运行时类型识别

google禁止使用RTTI(运行时类型识别);
即禁止使用typeiddynamic_cast
在运行时去判断类型,通常意味着这是设计问题。可以多态或访问者设计模式来代替

类型转换

C++的类型转换建议使用static_cast<>()来代替int y=(int)x等方式;
使用const_cast来去掉const限定符;
reinterpret_cast的使用必须要谨慎,它类似与C的强制转换,(名字这么长就不要用了);

google建议:只有在记录日志时使用流;
流的缺点:处理性能低、不能实现软件国际化(因为流不支持字符串操作符重新排序);
建议使用printf+read/write来代替

++i 还是 i++?

google建议使用++i、–i(前置自增自减),尤其是对迭代器和模板类类型时。
因为++i 比 i++ 效率高,i++(后置自增、自减需要对i进行一次拷贝,如果i是迭代器或类等,拷贝的代价比较大);

const

google强烈建议在可以使用const的情况下,都去使用它。
1、const形参:函数内部不修改形参;
2、const函数:函数不修改成员变量并且不调用非const函数;
3、const成员:对象构造后不再发生改变;

constexpr

constexpr是真正意义上的常量,在编译时就确定了;
const在初始化后才确定,可以在运行时确定;

相关文章:

使用Ceph集群作为Kubernetes的动态分配持久化存储

2019独角兽企业重金招聘Python工程师标准>>> 使用Docker快速部署Ceph集群 &#xff0c; 然后使用这个Ceph集群作为Kubernetes的动态分配持久化存储。 Kubernetes集群要使用Ceph集群需要在每个Kubernetes节点上安装ceph-common 1. 为kubernetes创建一个存储池 1 2 #…

Cosmos的基石:IL2CPU编译器--.net/C#开源操作系统学习系列三

本文的代码包以cosmos-12304.zip为例&#xff08;从这个包开始&#xff0c;COSMOS的内核算是有了个基本的雏形&#xff0c;就像是一颗大树在出芽前会先长出庞大的根系&#xff0c;现在就要破土长出第一颗芽了&#xff09; IL2CPU之于COSMOS就相当与GCC之于LINUX&#xff0c;查看…

【面试 多线程】【第九篇】多线程的问题

1.多线程有什么用 发挥多核CPU优势&#xff0c;防止阻塞&#xff0c;更快的处理数据 2.多线程的实现方式有哪几种&#xff0c;分别的特点优势是什么样的 1》继承Thread类&#xff0c;重写run方法&#xff0c;start启动多线程 2》实现Runnable接口&#xff0c;重写run方法&…

那个大战AlphaGo的柯洁,将免试入读清华大学工商管理专业

日前&#xff0c;柯洁将免试入读清华大学的消息经媒体曝光了出来。《2019 年优秀运动员免试入学推荐名单》3 月 10 日开始公示&#xff0c;围棋世界冠军柯洁的名字出现在名单上&#xff0c;其中表明他将就读清华大学工商管理类专业。据了解&#xff0c;柯洁预计今年下半年入学清…

【Qt】设置背景

1、使用样式表qss设置背景 QDialog 设置背景图片: dlg->setStyleSheet("QDialog{border-image: url(://test.png);}"); 设置背景颜色: dlg->setStyleSheet("QDialog{background-color: red;}"); QWidget 设置背景图片: wgt->setStyleSheet…

基于Hadoop的MapReduce框架研究报告

http://www.doc88.com/p-19830708273.html

【Qt】设置窗口透明度

1、使用setWindowOpacity设置透明度 setWindowOpacity(0.5); 设置完成会使窗体、标题栏、子控件都透明 2、使用样式表qss设置窗体透明 dlg->setStyleSheet("QDialog{background-color: rgba(255, 0, 0, 0.5);}");wgt->setStyleSheet("QWidget{backgrou…

7行Python代码,搭建可以识花的机器学习App|视频教程

你想学Python&#xff0c;却不知如何着手&#xff0c;那你需要一种更加有趣的学习方式。Siraj Raval是一位人工智能领域的编程高手&#xff0c;毕业于哥伦比亚大学&#xff0c;曾任职于 Twilio 和 Meetup&#xff0c;他通过制作教程类短视频的方式在Youtube上积累了大量的粉丝&…

java中缀表达式转后缀表达式(逆波兰算法)

四则运算是栈的重要应用之一 中缀表达式转后缀表达式&#xff08;逆波兰算法&#xff09;过程 从左到右遍历中缀表达式数字直接输出为后缀表达式一部分如果是符号&#xff0c;则判断与栈顶元素的优先级高于栈顶元素优先级直接入栈低于或等于栈顶优先级栈顶元素出栈并输出为后缀…

Wpf消息循环之消息传递

几天遇见一个问题需要检查某个wpf程序是否已经运行&#xff0c;如果没有运行则启动传递参数&#xff0c;如果已运行则需要直接传递消息。在没有运行 情况下传递参数很简单&#xff0c;我们只需要Process cmd窗口启动并传递参数&#xff0c;在程序中处理。但是如果程序已经启动有…

【Qt】使用sqlite3数据库时,主键自增和获取自增后的主键的

创建数据表格&#xff0c;设置主键自增 创建数据库时&#xff0c;启用主键自增加特性 Create table testTable (id INTEGER PRIMARY KEY AUTOINCREMENT,。。。。 注意事项&#xff1a;设置主键自增时&#xff08;AUTOINCREMENT&#xff09;&#xff0c;主键类型必须是INTEGER&…

拿下斯坦福和剑桥双offer,00后的算法学习之路

董文馨&#xff0c;00后&#xff0c;精通英语&#xff0c;西班牙语。斯坦福大学计算机系和剑桥大学双Offer&#xff0c;秋季将进入斯坦福大学学习。10岁开始在国外上学&#xff1b;12岁学Scratch&#xff1b;13岁学HTML & CSS&#xff1b;14岁开始学Python & Java&…

Mybatis【配置文件】就是这么简单

配置文件和映射文件还有挺多的属性我还没有讲的&#xff0c;现在就把它们一一补全 映射文件 在mapper.xml文件中配置很多的sql语句&#xff0c;执行每个sql语句时&#xff0c;封装为MappedStatement对象&#xff0c;mapper.xml以statement为单位管理sql语句 Statement的实际位置…

cto denalil

Denali使用准虚拟化技术来提高x86电脑上虚拟机的性能。Denali的虚拟机为因特网服务专门支持了最小化的操作系统。 系统可以运行上千虚拟机。Xen与Denali不同&#xff0c;因为它试图运行适当数量的完整操作系统&#xff0c;而非大量轻量级操作系统。转载于:https://blog.51cto.c…

Redis学习笔记 - 数据类型与API(1)Key

Redis学习笔记 - 数据类型与API&#xff08;1&#xff09;Key Key相关命令 1. 常用命令 命令含义时间复杂度keys查找所有符合给定模式 pattern 的 keyO(N)&#xff0c; N 为数据库中 key 的数量dbsize计算key的总数O(1)exists检查key是否存在O(1)del删除指定的key-valueO(1)exp…

【Qt】enum和QString的相互

使用Q_ENUM注册enum Q_ENUM使用元对象系统meta-object来注册,因此在enum所在的类中必须包含宏Q_OBJECT或者Q_GADGET。 例子如下 class MyClass : public QObject{Q_OBJECTpublic:MyClass(QObject *parent = 0);~MyClass();enum Priority { High, Low, VeryHigh, VeryLow };Q_…

Gmail全球大规模宕机

整理 | 非主流出品 | AI科技大本营&#xff08;ID: rgznai100&#xff09;今天&#xff08;3 月 13 日&#xff09;&#xff0c;Google 的多项服务在全球范围内出现了不同程度的宕机&#xff0c;包括 Gmail、Google Drive、 Hangouts、谷歌地图等。受影响最大的是拥有超 10 亿用…

搭建域控服务器

作业环境 服务器端(VirtualBox VM) 操作系统&#xff1a;Windows Server 2003 Enterprise Edition SP2 IPAddress&#xff1a;192.168.1.1/255.255.255.0 Gateway&#xff1a;null 客户端(VirtualBox VM) 操作系统&#xff1a;Windows XP SP3 IPAddress&#xff1a;192.168.1.2…

【Git】ubuntu安装git

sudo apt-get install git 图形界面的&#xff1a;sudo apt-get install git-gui 查看ssh服务是否启动 sudo ps -e | grep ssh 如果没有启动执行如下命令&#xff1b; sudo service ssh start 如果没有ssh&#xff0c;使用如下命令安装 sudo apt-get install ssh

Composer 篇

学习网站Composer 中文网 资源包 Packagist Packagist / Composer 中国全量镜像如何安装 Composer下载 Composer安装前请务必确保已经正确安装了PHP。打开命令行窗口并执行php -v查看是否正确输出版本号。打开命令行并依次执行下列命令安装最新版本的 Composer&#xff1a;php …

西工大开源拥挤人群数据集生成工具,大幅提升算法精度 | CVPR 2019

作者 | 周强&#xff08;CV君&#xff09;转载自 我爱计算机视觉&#xff08;公众号id&#xff1a;aicvml&#xff09;近年来&#xff0c;因为拥挤人群计数在视频监控、公共安全方面的应用广泛&#xff0c;引起了不少学者的关注。简单说来这个任务就是给定图像&#xff0c;返回…

getElementById 不能取得visible=false 的控件解决方法

想要绑定textbox的回车事件到一个按钮上&#xff0c;但不想显示这个按钮&#xff0c;如果你把这个button的visible设置为false,那么你使用 getElementById是获取不到的&#xff0c;或者说取到的为空。这是因为Visiblefalse&#xff0c;在编译后&#xff0c;该控件在页面上不显示…

【Git】在本地创建git库管理自己的代码

1、创建本地库 git init . 新建库 git config --global user.email “hello163.com” git config --global user.name “laoer” git config --global core.editor vim //将默认编辑器由nano更改为vim 2、提交 2.1 git add . 将当前目录下所有文件添加到提交缓冲区 2.2 git …

“智慧血联网平台”亮相军民融合技术装备博览会

该平台可实现血液全程跟踪溯源&#xff0c;为大众提供安全、透明、便捷的用血服务。 一个打造智慧化血液管理新模式的血联网平台最近亮相第三届中国军民融合技术装备博览会。该平台可实现血液全程跟踪溯源&#xff0c;为大众提供安全、透明、便捷的用血服务。 此次博览会以“聚…

AI专利之争:小米超华为,国家电网才是大Boss?

作者 | 一一编辑 | 琥珀出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;以往相关机构发布 AI 专利数量排行榜时&#xff0c;如果表明“中国在 AI 专利申请数量上已经超过美国&#xff0c;中国在 AI 技术实力上已在国际上遥遥领先”&#xff0c;这类榜单会招致对中国科…

SLF4J 的几种实际应用模式--之二:SLF4J+Logback

前面讲的 SLF4J 的用法之一是 SLF4JLog4J&#xff0c;而这里要推出的组合是 SLF4JLogBack。不用 Log4J&#xff1f;难道还有比 Log4J 更好的日志实现吗&#xff1f;是的&#xff0c;答案就是 LogBack。假如你知道 LogBack 和 Log4J 是同出一位大师之手&#xff0c;你就不会觉得…

10行Python,搭建一个游戏AI | 视频教程

昨天为大家推荐了三个Python视频&#xff0c;包含&#xff1a;《利用Python&#xff0c;用4分钟时间搭建一个情感分析系统》、《7行Python代码&#xff0c;搭建一个可以识花的机器学习APP》、《10行Python&#xff0c;搭建一个可以自动作曲的神经网络》&#xff0c;今天营长再为…

ABAP git客户端

Jerry习惯把自己写的小程序放到自己的github上&#xff1a;https://github.com/i042416 对于写的ABAP程序&#xff0c;需要先把SAPGUI里的代码手动拷贝到本地&#xff0c;然后用git客户端push到github上。 但是其实可以直接在SAPGUI里通过一个ABAP实现的git客户端将代码push到g…

【Git】git 与远程库交互

一、远程操作 1、克隆 git clone <url> 2、提交 git add &#xff1a;添加 git commit -m “修改信息” &#xff1a;提交到本地 git branch -a &#xff1a;查看所有分支&#xff0c;红色的是远程分支 git fetch &#xff1a;获取远程分支 git diff HEAD FETCH_HEAD…

[轉]在jQuery1.5中使用deferred对象 - 拿着放大镜看Promise

http://www.cnblogs.com/sanshi/archive/2011/03/11/1981789.html 不錯的JS方面的文章 三生石上