Effective C++ Note1

在这里插入图片描述

导读

声明式(declaration):是告诉编译器某个东西的名称和类型(type),但忽略细节

函数的声明揭示其签名式(signature),也就是参数和返回类型。一个函数的签名等同于该函数的类型。
通常我都会忘记怎么写函数指针,有了签名式这个概念:我明白了函数指针为什么这样写。

定义式(definition):对于对象而言:定义式是编译器为此对象拨发内存的地方。对function或function template而言,定义式提供了代码本体。对class或class template而言:定义式列出它们的成员。

被声明为explicit的构造函数通常比其non-explicit兄弟更受欢迎。
我不喜欢隐性转换。所以我觉得很有道理

copy构造函数:以同类型对象初始化自我对象
copy assignment操作符:从另一个同型对象中拷贝其值到自我对象
一个新对象被定义:一定是使用构造函数。所以

Foo f1;         //构造函数
Foo f2 = f1;    //虽然是等号,但是还是调用构造函数

当一个对象passed by value,会调用构造函数。

lhs = left hand size
rhs = right hand size
原来这两个参数是这个意思。

视C++为一个语言联邦

将C++分为四个次语言:
C: 区块,语句,预处理器,内置数据类型,数组,指针等都来源于C。
Object-Oriented C++:也即是C with classes:classes,封装,继承,多态,virtual函数(动态绑定)…
Template C++:泛型编程(generic programming)
STL:容器(containers),迭代器(iterators),算法(algorithms)已经函数对象(function objects)

C part of C++中:对于内置类型(plain type):passed by value好一些。
Object-Oriented C++ :由于用户自定义的构造函数和析构函数的存在,pass by reference to const 往往更好。
总是:C++高效编程视情况而变化。取决于你使用C++哪一个部分。

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

因为#define只是复制粘贴。所以会出很多莫名的问题。
①:#define 常量
比如符号表里是没有#define,所以你调试的时候找不到它。
而且#define的作用域是全局:所以#define不提供封装性。
但是const定义的常量可以解决上面的问题。 所以:使用const代替#define定义常量。

②#define 实现宏marco
可以使用template inline函数替代

尽可能使用const

const 用作对对象:

使其称为常量对象。
在这里插入图片描述

const用作与函数

函数返回const值,往往可以降低因客户错误造成的错误
如果必要请将函数参数为const

const用作成员函数

const作用于成员函数:确保该成员函数可以作用于const对象
在这里插入图片描述

两个成员函数如果只是常量性不同,可以被重载。

in-class 初值设定只允许对整数常量进行,所以可以把初值放在定义式。

确保对象被使用前已先被初始化

对于内置类型:使用前要手动初始化。
对于自定义类型:构造函数使用成员初值列

猜你喜欢

转载自blog.csdn.net/weixin_41256413/article/details/84196272