effective c++ 18 让接口容易被正确使用, 不易被误用

news/2024/11/15 4:49:41/

effective c++ 18 让接口容易被正确使用, 不易被误用

在本节中作者建议大家在写代码的时候要提供的接口需要拥有正确性和易用性。 写代码时你可能根据第一感觉就写出了一个接口,这个时候你可能需要再思考思考这个接口是否好用, 是否可能被误用。作者这里用了一些例子来说明如此写出好的接口。 实际工作中, 开发出好的接口远比本节讲的要复杂的多。 个人的理解就是你可以根据第一感觉写出接口, 但是建议再思考思考这样是不是最好的。 如果你的同事抱怨你的接口不好用, 这个时候你就更应该重新思考你的接口。

分析

作者这里给了一个例子,设计了如下的一个日期的类。 乍一看好像没有啥问题, 哈哈。其实实际工作中大部分人都是这么干的。

class Date{
publicDate(int month, int day, int year);
}

如果遇到比较粗心的程序员, 他可能这样调用:

Date d(30, 3, 1995)

这个时候编译器不会有任何报错。这个错误将会一直到运行时才能发现。很多时候需要到QA才能报出问题。

倘若这时候我们为年月日定义出类型, 并且在构造函数中使用该类型, 这样上面的使用错误将会在编译期就报出。

因此恰当地引入新类型对预防"接口被误用"有很好的效果。

struct Day
{
explicit Day(int d) : val(d) {}
int val;
};struct Month
{
explicit Month(int m) : val(m) {}
int val;
};struct Year
{
explicit Year(int y) : val(y) {}
int val;
};class Date
{public:Date(const Month& m, const Day& d, const Year& y) :month(m.val), day(d.val), year(y.val){}private:int month, day, year;
};

其实很多编程技巧都是想尽可能地利用好编译器的报错功能去将很多错误从运行时转移到编译时,恰当地引入新类型也是这样的一个目的。

总结

  • 好的接口很容易被正确使用,不容易被误用。你应该在你的所有接口中努力达成这些性质。
  • "促进正确使用"的办法包括接口的一致性,以及与内置类型的行为兼容。
  • "阻止误用"的办法包括建立新类型、限制类型上的操作,束缚对象值,以及消除客户的资源管理责任。
  • tr1::shared_ptr支持定制型删除器。这可防范DLL问题,可被用来自动解除互斥锁。(新标准是std::shared_ptr)

http://www.ppmy.cn/news/82241.html

相关文章

单体项目偶遇并发漏洞!短短一夜时间竟让老板蒸发197.83元

事先声明:以下故事基于真实事件而改编,如有雷同,纯属巧合~ 眼下这位正襟危坐的男子,名为小竹,他正是本次事件的主人公,也即将成为熊猫集团的被告,嗯?这究竟怎么一回事?欲…

容器编排器们的自我介绍

哈喽大家好,我是咸鱼 咸鱼在《一文带你了解容器技术的前世今生》有介绍过容器技术的由来以及Docker项目的发展 我们知道,Docker 及其他容器技术能够极大地简化应用程序的部署,做到了”开箱即用“ 俗话说:”凡是具有两面性“。容…

基于html+css的图展示91

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

精准数据分析,TeeChart为企业量身定制可视化退休预估方案

TeeChart for .NET是优秀的工业4.0 WinForm图表控件,官方独家授权汉化,集功能全面、性能稳定、价格实惠等优势于一体。TeeChart for .NET 中文版还可让您在使用和学习上没有任何语言障碍,至少可以节省30%的开发时间。 点击立即下载最新版Tee…

Linux 操作系统原理 — netfilter/iptables 流量处理框架

目录 文章目录 目录Netfilter 流量处理框架Netfilter 的实现原理Netfilter 的工作原理规则(Rules)链(Chains)表(Tables)数据包处理流程图 iptables CLIiptables-service指令应用查看规则添加规则删除规则修…

FPGA纯verilog代码实现H265视频压缩 支持4K30帧分辨率 提供工程源码和技术支持

这里写目录标题 1、前言2、我这里已有的视频图像编解码方案3、H265--视频压缩理论4、H265--视频压缩--性能表现5、H265--视频压缩--设计方案6、H265--视频压缩--时序7、Vivado工程详解8、移植上板应用9、Vivado功能仿真10、福利:工程代码的获取 1、前言 H265视频压…

机器学习笔记:高斯混合模型 GMM

1 高斯混合模型 总体分布是由K个高斯分布的组成的混合分布 1.1 一些记号 xj第j个观测数据K模型中高斯模型的数量αk 观测数据属于第k个子模型的概率 第k个子模型的高斯分布密度函数 (也就是一个高斯分布的密度函数 第j个观测数据属于第k个子模型的概率 1.2 高斯…

厚积薄发丨美格智能子公司众格智能荣获“张江之星”“闵行区企业技术中心”双项企业授牌

5月23日下午,2023年闵行科技节开幕式在大零号湾科创大厦举行。在开幕式“创蝶变智造”板块,美格智能技术股份有限公司全资子公司众格智能科技(上海)有限公司(以下简称:众格智能)入选“张江之星”…