摘要: 本节书摘来自异步社区出版社《C++覆辙录》一书中的第1章,第1.9节,作者: 【美】Stephen C. Dewhurst(史蒂芬 C. 杜赫斯特),更多章节内容可以访问云栖社区“异步社区”公众号查看。

本节书摘来自异步社区出版社《C++覆辙录》一书中的第1章,第1.9节,作者: 【美】Stephen C. Dewhurst(史蒂芬 C. 杜赫斯特),更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.9:使用糟糕的语言

当一个更大的世界入侵了C++社群原本悠然自得的乐土之时,它们带来了一些足堪天谴的语言和编码实践。本节乃是为了厘清返璞归真的C++语言所使用的正确适当、堪称典范之用语和行为。

用语
表1-1列出了最常见的用语错误,以及它们对应的正确形式。

表1-1 常见用语错误及其对应正确用语

没有什么所谓“纯虚基类”。纯虚函数是有的,而包含有或是未能改写(override)此种函数的类,我们并不叫它“纯虚基类”,而是叫它“抽象类”。

C++语言中是没有“方法”的。JavaSmalltalk里才有方法一说。当你颇带着一丝自命不凡地就面向对象的话题侃侃而谈之时,你可能使用像“消息”和“方法”这种用语。但如果你开始脚踏实地,开始讨论你的设计对应的C++实现时,最好还是使用“函数调用”或“成员函数”来表达。

还有一些不足为信的C++专家(是在说你吗?)使用“destructed”作为“constructed”的对应词。这明显是英语没学好35,正确的对应词是“destroyed”。

C++ 语言中确实有强制型别转换(或曰型别转换)运算符——事实上只有4个(static_castdynamic_castconst_cast以及reinterpret_cast)。遗憾的是,“强制型别转换运算符”常常被不正确地用于表达“成员型别转换运算符”,而后者指定了某种对象何以被隐式地转换到另外的型别。

class C {operator int *()const; // 成员型别转换运算符//...
};```
当然用强制转换运算符来完成型别转换的工作也是允许的,只要你不把用语搞混就成。请参见常见错误31中有关“常量指针”和“指涉到常量的指针”的讨论,以加深对本主题的理解。空指针
从前,当软件工程师使用预处理符号`NULL`来表示空指针时,他会遭遇潜在的灾难:

void doIt( char * ); 
void doIt( void * ); 
C *cp = NULL;```
麻烦出在NULL这个符号在不同的平台上,有很多种定义的方法:

#define NULL ((char *)0)
#define NULL ((void *)0) #define NULL 0``` 这些各扫门前雪的不同定义严重损害了C++语言的可移植性: 

doIt( NULL ); // 平台相关抑或模棱两可?
C *cp = NULL; // 错误?``
事实上,在C++语言里是没有办法直接表示空指针的。但我们可以保证的是,数字字面常量0可以转换成任何一种指针型别对应的空指针。那也就是传统的C++语言保证可移植性和正确性的用法36。现在,C++标准规定像(void *)0这样的定义是不允许的37,可见这是个和
NULL的使用并无多大干系的技术问题(如若不然,NULL`岂不是成了格外受人青睐的预处理符号?其实它是普通不过的)。可是,真正领会了C++语言精神的软件工程师仍然使用字面常量038。任何其他用法都会使你显得相当非主流。

缩略词
C++软件工程师都有缩略词强迫症,不过与管理层相比,可谓小巫见大巫。表1-2在你的同事给你来上一句“RVO将不会应用到POD上,所以你最好自己写个自定义的复制ctor”时能派上用场。

表1-2 常用缩略词的意思

用云栖社区APP,舒服~

【云栖快讯】快速解决数据库难题,云数据库经典案例及最佳实践直播专场!阿里云数据库专家团队成员倾囊相授!赶紧报名
原文链接

转载于:https://www.cnblogs.com/jzy996492849/p/6934276.html

《C++覆辙录》——1.9:使用糟糕的语言相关推荐

  1. 《C++覆辙录》——2.9:自反初始化

    本节书摘来自异步社区出版社<C++覆辙录>一书中的第2章,第2.9节,作者: [美]Stephen C. Dewhurst(史蒂芬 C. 杜赫斯特),更多章节内容可以访问云栖社区" ...

  2. C++是一种糟糕的语言 Linux之父炮轰C++

    Linux之父Linus Torvalds为了Linux内核开发而专门打造的版本控制软件Git已经引起了业界的广泛关注.昨天,有一位Dmitry Kakurin老兄在查看了源代码之后,发现使用的是纯C ...

  3. 为什么指针是个糟糕的语言特性

    1 什么是指针 本文所谓的指针(pointer) ,是指C和C++等语言中的内建的语言特性. 在不同范畴中指针这个概念有所不同.在体系结构规范中,指针指称特定的整数字节地址或者两个地址的差(地址偏移量 ...

  4. php失业 2019_2019年了,PHP已不再是当年那个“设计糟糕”的语言

    图片来源图虫:已授站长之家使用声明:本文来自于微信公众号 InfoQ(ID:infoqchina),作者 | Brent,译者 | 张兰月,授权站长之家转载发布. 这篇文章不在于解决关于 PHP 的那 ...

  5. c# 桌面录屏,生成视频方案总结

    目录介绍 C#录屏思路 常用实现方法 OpencvSharp录屏介绍 C#录屏思路 录屏主要有摄像头录制,采集卡录制,桌面录制,麦克风录制,声卡录制等常用业务需求,主要开发思路 1.通过一定帧频截图采 ...

  6. 基于微信小程序的校友录系统

    本系统采用微信开发者开发.结合后台java语言以及Mysql数据库等技术.系统主要分为管理员和用户.校友三部分,管理员服务端:首页.个人中心.用户管理.校友管理.校友风采管理.校友视频管理.视频分类管 ...

  7. 2018年阅读书物列表

    书名 作者 出版社 富爸爸穷爸爸 罗伯特•清崎    莎伦•莱希特 四川文艺出版社 黑匣子思维 马修•萨依德 江西人民出版社 高手,精英的见识和我们的时代 万维钢 中国工信出版社 聪明人的一张纸工作整 ...

  8. 学习要趁早,专栏上新,早鸟订阅送图书【活动结束】

    51CTO博客专栏又有新内容了<负载均衡高手炼成记>从入门到实操,Linux老鸟带你走上高并发架构之路. 为了贯彻学习要趁早的理念,我们特意为前100名订阅专栏的小伙伴免费赠送纸质图书一本 ...

  9. 【已兑完】书单 | 2019开年福利 —— 你学专栏,我送书!

    专栏快速通道→ 新专栏→ 序号 书名 数量 兑换用户(订阅用户名) 1 PythonCookBook中文版(已兑完) 3 www1707:wx5c6522e0cb162: wx5c5b843f1a1c ...

最新文章

  1. DF-SLAM:一种深度特征提取方法
  2. 进程、线程与应用程序域
  3. C#常用控件的属性以及方法(转载)
  4. mysql数据库建立的数据库在哪个文件夹?
  5. 【maven】 在 MyEcplise上使用maven搭建Web项目
  6. 9 Characteristics of Free Software Users
  7. 【LeetCode】【HOT】394. 字符串解码(栈)
  8. angelajs中ajax,Fabric.js Triangle angle属性用法及代码示例
  9. bt种子简介与magnet磁力介绍
  10. 易语言窗口c_句柄取进程名,易语言进程id取窗口句柄
  11. Android 蓝牙BLE开发详解
  12. 人工智能数学基础---定积分2:定积分的性质
  13. dcos 1.7 目录挂载测试
  14. 商标设计后一定要向商标局进行重新提交,商标持有公司变更后要及时变更商标
  15. 蜜蜂问题- 斐波那契数列
  16. STM32基于固件库学习笔记(11)RTC实时时钟
  17. ucos II任务管理之一:挂起任务
  18. CVPR 2021 | 超实用!住宅户型识别与重建技术来啦!
  19. 网络角斗士棋竞技对战平台
  20. 永久免费oa办公系统到底靠不靠谱?免费oa办公系统市场分析

热门文章

  1. 设计模式:KISS、YAGNI、DRY 原则,迪米特法则(LOD)
  2. intellij idea 全局搜索
  3. 剑指offer三:从尾到头打印链表
  4. 图解RxJava2(一)
  5. Netmeeting的四个端口
  6. swift的可选值(optional)
  7. 嵌入式开发之zynq——zynq开发环境搭建
  8. String类中toCharArray()方法的用法
  9. js深入研究之牛逼的类封装设计
  10. oracle 11g rac asm磁盘组增加硬盘