学习C ,常见的误解

学习C++你是否会有以下几点误解?
1. “要理解C++,你必须先学习C”
2. “C++是一门面向对象的语言”
3. “为了软件可靠性,你需要垃圾回收”
4. “为了效率,你必须编写底层代码”
5. “C++只适用于大型、复杂的程序”
如果你中*了,说明这篇文章适合你看。对某些人,某些任务,在某些时间,其中一些误解曾经只是正确的。然而,在如今的C++,应用广泛使用的最先进的ISO C++ 2011编译器和工具,它们只是误解。
下面来一一解释
误解一:“要理解C++,你必须先学习C”
学习C++基础编程比学习C要容易地多。
C几乎是C++的一个子集,但是它不是最先要学习的最好的子集,因为C缺少计数支持,类型安全,和易用的标准库,而C++为简单任务提供了这些。
误解二:“C++是一门面向对象的语言”
C++支持OOP和其他编程风格,但它并不局限于狭隘的“面向对象”。它综合地支持了包括面向对象和泛型编程技术。通常,一个问题的最优解决方案,包含不止一种风格(范例)。“最优”,我指的是最短、最易于理解、最有效率和最易于维护等。
“C++是一门面向对象的语言”使人们认为C++不是必要的(当与C做比较时),除非你需要一个巨大的类继承层次以及很多须函数(运行时多态)——对很多人和很多问题,这样应用并不合适。相信这个误区导致C++因为不是纯面向对象而遭到谴责;毕竟,如果你把“好”和“面向对象”等同起来,那么C++明显包含了很多不是面向对象的东西,一定会被认为是“不好”。不管是哪种情形,这个误解为不学习C++提供了一个很好的借口
误解三:“为了软件可靠性,你需要垃圾回收”
在回收不再使用的内存上,垃圾回收做的很好,但是并不完美。它并非灵丹妙药。因为内存可以被间接地引用,并且很多资源并不是普通内存。
误解四:“为了效率,你必须编写底层代码”
许多人相信高效率的代码必须是底层代码。一些人甚至认为底层代码天生就是高效的(“如果代码很丑陋,那它一定很高效!一定有人花费了大量时间和精力来优化它!”)。当然,你仅仅使用底层代码是可以写出高效代码的,并且有时在直接处理机器资源时必须使用底层代码。
然而,你一定要衡量一下工作是否有价值:现代C++编译器非常高效,而现代机器架构非常复杂。如果必须使用底层代码,一定要通过接口封装起来,以便于使用。通常,通过高层接口封装底层代码,会带来更好的优化(如,避免“滥用”底层代码)。在关注效率的场合,首先尝试用高层抽象来呈现需要的解决方案,而不要不加考虑地使用比特位和指针。
误解五:“C++只适用于大型、复杂的程序”
C++是一个巨型的语言。它定义的大小和C#与Java差不多。但是这并不意味着你必须知道每一个细节,或者在每一个程序中都用到所有特性。
接下来再说一个C++非常经典的易犯错的案例
错误代码:
12bool operator( )(const GUID& _Key1, const GUID& _Key2) const{ return memcmp(&_Key1, &_Key2, sizeof(GUID)) == -1; }解释
不能将 memcpy()、strcmp() 以及其他一些标准函数的返回值,和 1、-1 这些具体的数字做比较,因为这些函数的返回值只保证大于 0 或者小于 0(译注:而并不保证大于0就等于1,小于0就等于-1)。
上面那段错误的代码可能在很长时间内都能正常工作。不过那仅仅是因为运气好而已,没什么其他原因。某一天你写的函数很可能突然间就崩溃了 —— 比如,你换了一个编译器编译源代码,或者通过其他方式优化了 memcpy() 函数。然后你的代码就不能正常工作了。
正确的代码:
12bool operator( )(const GUID& _Key1, const GUID& _Key2) const{ return memcmp(&_Key1, &_Key2, sizeof(GUID)) < 0; }
建议
不要依赖函数本身的行为。如果文档上说一个函数能返回一个不等于 0 的值,那它就是这么实现的。也就是说这个函数可能返回 -10、2 或者 1024。你可能经常看到函数的返回值就是 -1、0 或者 1,但是这并不能保证它每次都会这么做。
这个错误是通过 PSV-Studio 静态分析工具扫描分析得到的。错误文本如下:V698 表达式 “memcmp(…) == -1“ 是不正确的。这个函数可能的返回值不一定只有“-1”,而可能是任何负数。请考虑到使用 “memcmp(…) < 0 ”来替换。
END
来源:网络

(0)

相关推荐

  • 萌新带你开车上p站(终极番外)

    0x01前言 这关其实和pwn关系不大,主要考察的都是linux下一些函数的操作,考察linux的基本功.涉及到的知识点包括一些经典的函数原型.IO重定向.文件描述符.管道.环境变量.socket编程 ...

  • Vue响应式系统如何操作运用?本文详解

    前言 之前学习 vue 的时候,一直没刨根问底过.在看到网上这类文章比较多,参差不齐的质量有时候看的一头雾水.当然也有不错的文章,但是终究是别人的理解.于是写一篇关于自己的理解记录下来,亲身实践才能收 ...

  • 如何手写Vue-next响应式呢?本文详解

    前言 1.本文将从零开始手写一份vue-next中的响应式原理,出于篇幅和理解的难易程度,我们将只实现核心的api并忽略一些边界的功能点 本文将实现的api包括 track trigger effec ...

  • 你真的了解Python吗?这些必须知道

    虽然大家都知道Python是一门编程语言,但很多人对它了解的并不是很透彻,接下来小编通过这篇文章为大家介绍一下,希望对你有所帮助. 什么是Python? Python是一种解释型.面向对象.动态数据类 ...

  • C与C++的真正区别在哪里(C语言通常被认为是面向系统的编程语言)

    面向对象&面向过程 C++是C语言的延伸,可以理解为C++在C语言里加入了面向对象的特性.因为只有面向对象特性的加持,代码才能更好的复用.扩展和工程化,这是大型项目的必备要素. 而C语言是一种 ...

  • 原来搞单片机也可以面向对象

    摘要:在看别人单片机程序时,你也许是奔溃的,因为全局变量满天飞,不知道哪个在哪用了,哪个表示什么,而且编写极其不规范.自己写单片机程序时,也许你也是奔溃的.总感觉重新开启一个项目,之前的写过相似的代码 ...

  • 听众问答 | 关于量子力学都有哪些常见的误解?

    科学有故事·听众问答 本系列内容来自音频专辑<汪诘:科学有故事>中的"听众问答",定期答复听友们提出的各种与科学有关的问题.收听音频可至喜马拉雅.网易云音乐.蜻蜓等各大 ...

  • 学习 | 最常见、最难克服——边中色差

    边中色差的预防与控制方法 边中色差是印染工艺中常见且难克服的问题之一.从原材料.生产管理.工艺.设备和操作等方面分析了产生染色边中色差的原因,并提出了相应的预防措施以及过程控制. 染色织物边中色差是印 ...

  • 物理学习中常见思维障碍归纳

    姜晓芬 思维定势 有些同学在学习物理时,往往将自己的经验或见解原封不动地用在对物理学科知识的学习之中,从而形成对学习物理知识的干扰和影响,甚至产生一些错误的认识或理解. 例1生活经验告诉我们,马拉车, ...

  • 投资中一些常见的误解(三)——5PE买进就相当于5年收益100%? 在烟蒂股投资者中最常见的一种说法...

    在烟蒂股投资者中最常见的一种说法就是:这股现在估值只有5PE,现价买进相当于5年回本.在2015-2016年很多银行股的大威就是用这样的谬论忽悠粉丝去买入民生银行,中信银行的.还有2017年内房股最火 ...

  • 学习 | 最常见的10种纺织面料的缩水率

    织物的缩水率是指织物在洗涤或浸水后织物收缩的百分数.缩水是纺织品在一定状态经过洗涤.脱水.干燥等过程发生长度或宽度变化的一种现象.缩水程度涉及不同种类的纤维.织物的结构.织物加工时所受之不同外力作用等 ...

  • 陈春花:管理常见的误解

    导读:在遇到管理不畅.员工能力弱的情况,管理者首先需要检讨的是自己对管理的认知和行为是否正确,因为只要管理者具有正确的认知和行为,所有人的绩效就一定会展示出来. 01 管理须用问题作导向,不要用成就作 ...

  • 高中学习方法|高中学习时常见的三种错误方法大汇总!

    如果一个学生学习足够努力,成绩却一直不见提高,就该从学习方法上找原因了,可能是使用了错误的学习方法. 很多在初中通过理解记忆就能快速掌握的知识,到了高中,就不能快速掌握了,因为高中的知识更加注重理性思 ...

  • 梁宝川:考研学习时常见的负面情绪,你中了几种?

    每日写一篇文章的第3年173天 每一篇文章为大家考研赋能 我一直强调,在考研学习期间,心态是最核心的因素. 因为考研学习中,我们不免会遇到各种各样的负面情绪. 这是不可抗拒的. 与此同时,带来就是学习 ...

  • 学习 | 纺织印染常见60余种面料瑕疵,面料采购跟单人员赶快收藏!

    染色印花的生产加工中,如果质量管理不严,极容易出现印染性瑕疵,而作为一个布行或品牌公司的面料采购和跟单人员,是否掌握印染性瑕疵知识,由其是瑕疵形成的原因,是做好本职工作的基本前提.同样,作为印染公司, ...