更多课程 选择中心

C/C++培训
达内IT学院

400-111-8989

C++人人都会犯的错误,看看自己犯了没有?

  • 发布:C++培训
  • 来源:C++资讯
  • 时间:2020-07-09 14:26

学习C++你是否会有以下几点误解?

1. “要理解C++,你必须先学习C”

2. “C++是一门面向对象的语言”

3. “为了软件可靠性,你需要垃圾回收”

4. “为了效率,你必须编写底层代码”

5. “C++只适用于大型、复杂的程序”

如果你踩过这几个坑了,说明这篇文章适合你看。对某些人,某些任务,在某些时间,其中一些误解曾经只是正确的。下面来一一解释

误解一:“要理解C++,你必须先学习C”

学习C++基础编程比学习C要容易地多。

C几乎是C++的一个子集,但是它不是最先要学习的最好的子集,因为C缺少计数支持,类型安全,和易用的标准库,而C++为简单任务提供了这些。

误解二:“C++是一门面向对象的语言”

C++支持OOP和其他编程风格,但它并不局限于狭隘的“面向对象”。它综合地支持了包括面向对象和泛型编程技术。通常,一个问题的最优解决方案,包含不止一种风格(范例)。“最优”,我指的是最短、最易于理解、最有效率和最易于维护等。

“C++是一门面向对象的语言”使人们认为C++不是必要的(当与C做比较时),除非你需要一个巨大的类继承层次以及很多须函数(运行时多态)——对很多人和很多问题,这样应用并不合适。相信这个误区导致C++因为不是纯面向对象而遭到谴责;毕竟,如果你把“好”和“面向对象”等同起来,那么C++明显包含了很多不是面向对象的东西,一定会被认为是“不好”。不管是哪种情形,这个误解为不学习C++提供了一个很好的借口

误解三:“为了软件可靠性,你需要垃圾回收”

在回收不再使用的内存上,垃圾回收做的很好,但是并不完美。它并非灵丹妙药。因为内存可以被间接地引用,并且很多资源并不是普通内存。

误解四:“为了效率,你必须编写底层代码”

许多人相信高效率的代码必须是底层代码。一些人甚至认为底层代码天生就是高效的(“如果代码很丑陋,那它一定很高效!一定有人花费了大量时间和精力来优化它!”)。当然,你仅仅使用底层代码是可以写出高效代码的,并且有时在直接处理机器资源时必须使用底层代码。

然而,你一定要衡量一下工作是否有价值:现代C++编译器非常高效,而现代机器架构非常复杂。如果必须使用底层代码,一定要通过接口封装起来,以便于使用。通常,通过高层接口封装底层代码,会带来更好的优化(如,避免“滥用”底层代码)。在关注效率的场合,首先尝试用高层抽象来呈现需要的解决方案,而不要不加考虑地使用比特位和指针。

误解五:“C++只适用于大型、复杂的程序”

C++是一个巨型的语言。它定义的大小和C#与Java差不多。但是这并不意味着你必须知道每一个细节,或者在每一个程序中都用到所有特性。

接下来再说一个C++非常经典的易犯错的案例

错误代码:

12 bool 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() 函数。然后你的代码就不能正常工作了。

正确的代码:

bool 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 ”来替换。

当你还在担心能否就业时,达内学员提前被企业录取;当你转辗于各大招聘会时,达内学员收到了高薪offer;当你在各大招聘网站投递简历时,达内学员中有人一毕业进入五百强名企。所以选择很重要。找C++培训班,选达内就对了。

版权声明:转载文章来自公开网络,版权归作者本人所有,推送文章除非无法确认,我们都会注明作者和来源。如果出处有误或侵犯到原作者权益,请与我们联系删除或授权事宜。

预约申请免费试听课

填写下面表单即可预约申请免费试听!怕钱不够?可就业挣钱后再付学费! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!

上一篇:C++ 怎样让函数返回数组
下一篇:啥是封装?来看C++这个小技巧

C语言宏定义的几种使用方法

C与C++内存管理避坑指南

C/C++代码规范注释有哪些讲究?

C语言中,全局变量滥用的后果竟如此严重?

  • 扫码领取资料

    回复关键字:视频资料

    免费领取 达内课程视频学习资料

  • 搜索抖音号

    搜索抖音号:1821685962

    免费领取达内课程视频学习资料

Copyright © 2021 Tedu.cn All Rights Reserved 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有

选择城市和中心
黑龙江省

吉林省

河北省

湖南省

贵州省

云南省

广西省

海南省