zoukankan      html  css  js  c++  java
  • 《从缺陷中学习CC++》总结

                从缺陷中学习CC++总结

      从本质上来说,这就是一个CC++的错题集。全书中包括63个问题引发的错误,即书名中的缺陷。共分为10章,每一张还有一个比较经典的小结,个人感觉这本书只需要仔细看一下每一章后面的小结就可以了。

      第一章主要介绍了一些由于基础知识不清楚的原因造成的错误。重点是宏的使用问题还有数据类型之间转换出现的问题。

      第二章主要扯了一下编译的问题,实话说这个不怎么会遇到。

      第三章主要讲了C++库函数使用引发的错误。

      第四章就说了一些逻辑问题,没什么用。

      第五章主要介绍C++对文件操作时出现的几个常见问题。

      第六章讲述C++内存管理问题。

      第七章主要介绍C++多线程编程时出现的几个常见问题。

      第八章讲述C++的异常处理机制,必须会正确使用try~catch。

      第九章讲述了程序中的细节对程序性能的影响。

      第十章通过良好的设计和编写规范代码实现C++程序的跨平台.。

    书中的一些典型的建议如下:

    1.尽量的使用其他(如内敛函数、const)来代替宏(下述三点来自google c++风格指南):

        1--用宏来实现内敛进而提高效率,可以用内敛函数来替代。 

        2--用宏来存储常量,可以用const变量带替代。 

        3--用宏来"缩短"长变量名,可以用引用来替代。

    2.snprintf()函数通常用来代替有安全隐患的sprintf()函数。有关snprintf()函数的信息,参见C++ Reference给出的snprintf的详细说明        (http://www.cppreference.com/wiki/io/c/snprintf)。 

    3.最好使用strcpy()函数等来操作方法c_str()返回的指针。

            比如:最好不要这样: 

              char* c; 

              string s="1234"; 

              c = s.c_str(); 

            正确的用法是: 

              char c[20]; 

              string s="1234"; 

              strcpy(c,s.c_str());

            c_str()返回的是一个临时指针,不能对其进行操作。这样就不存在野指针的问题。

    4.注意memcpy和strcpy的使用区别

    5.在使用string的时候,尽量使用string内部提供的字符串函数来操作string。C++库函数最好的说明文档就是:http://www.cplusplus.com/reference/

    6.自己负责产生的内存空间,自己负责释放。 一般来说,new[]一定要和delete[]对应。

    7.C++最强大的就在于对内存的支配权。所以学好内存的使用和管理。

    最后说两个知识点。

    一:名词Coredump:

      许多程序和操作系统出错时会自动生成一个coredump文件,通常情况下coredmp包含了程序运行时的内存,寄存器状态,堆栈指针,内存管理信息等,即程序的当前状态。我们可以从coredump中分析出错误的原因。

    二:Char转为int和int转化为char的问题

      注意类型的截断和扩展。特别是char, unsigned char, unsigned int, int, short等之类的赋值, 要注意Char转为int时高位符号扩展的问题 。如果必须要进行类型转换的话,建议用c++标准的static_cast<int> 。 

  • 相关阅读:
    阿里消息队列中间件 RocketMQ 源码分析 —— Message 拉取与消费(上)
    数据库中间件 ShardingJDBC 源码分析 —— SQL 解析(三)之查询SQL
    数据库分库分表中间件 ShardingJDBC 源码分析 —— SQL 解析(六)之删除SQL
    数据库分库分表中间件 ShardingJDBC 源码分析 —— SQL 解析(五)之更新SQL
    消息队列中间件 RocketMQ 源码分析 —— Message 存储
    源码圈 300 胖友的书单整理
    数据库分库分表中间件 ShardingJDBC 源码分析 —— SQL 路由(一)分库分表配置
    数据库分库分表中间件 ShardingJDBC 源码分析 —— SQL 解析(四)之插入SQL
    数据库分库分表中间件 ShardingJDBC 源码分析 —— SQL 路由(二)之分库分表路由
    C#中Math类的用法
  • 原文地址:https://www.cnblogs.com/CHLL55/p/4366884.html
Copyright © 2011-2022 走看看