【Cpp 进阶】Effective C++ 总结提炼版

版权声明:本文为CSDN博主「无情码手」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Mars1533/article/details/128773881

导读

  • size_t 只是一个typedef,是unsigned类型,也是vector,deque,string内的operator[]函数接受的类型. 其头文件为 <cstddef>
  • definition定义式,对于变量:任务是编译器拨发内存,对于function:提供代码本体
  • 判别拷贝构造和拷贝赋值:有无新对象实例的产生,如果是对已有对象赋值->拷贝赋值
    • 参数传递,函数返回,都调用的是拷贝构造。(因为还不是已有对象嘛)
    • 对于已经初始化的对象,再次调用 = 是拷贝赋值
    • 需要注意的是,调用“=”可能是拷贝构造,而不一定就是拷贝赋值哦,如果还没构造出的话,就是拷贝构造。
    • operator= 返回的类型是引用类型&,赋值操作是在函数内就完成的,再次返回对象是为了能连等
      如果返回的不是引用(而是对象)的话,就会调用拷贝构造创建出临时对象temp,加大了开销。
  • lhs -> left hand side、rhs -> right hand side
  • TR1 -> Technical Report 1(c++新机能)
  • boost 一个组织(网站)提供可移植,源码开放的c++程序库

1. 视C++为一个语言联邦

  • C
  • Object-Oriented C++
  • Template C++
  • STL

额外补充:

  1. 内置类型pass by value 即可, pass by reference 开销更大

2. 尽量以const, enum, inline替换 #define

const:

首先,从处理阶段来说,const是在编译阶段,#define是在预处理阶段,当它出错时无法追踪

对于class类内的专属常量来说,要把它的作用域限制在类内(static const xxx)。而对于define来说,define不能定义任何class专属的常量,因为它没有scope的概念,也不提供任何封装性。

需要注意的是:类里的static const xxx是声明而非定义。声明时就可以给出初始化值了(新特性),定义时就不能再给初值。当然也可以选择声明时不给初值,定义时给初值。

enum:

对于类中的数组来说,要声明其长度,如果编译器不允许在编译时完成const int N, int a[N] 的设定,可用enum{xxx = x};

inline:

​ 1. 用template + inline 代替 define定义的形似函数宏,不需要(像宏函数那样)为了防止边界效应,在函数本体中为形参加上括号。

 

posted @ 2024-01-10 20:39  FBshark  阅读(5)  评论(0编辑  收藏  举报