阅读《Effective c++》第三版笔记 day 1
1.阅读《Effective c++》第三版笔记 day 1
2.阅读《Effective c++》第三版 day 3阅读《Effective c++》第三版 day 1
·容易区别的 copy 构造和 copy 赋值,如果一个新对象被定义,则一定会被某个构造函数调用,不可能做调用赋值操作,如果新对象没有被定义,则不会有构造函数被调用,会被当成赋值操作。
bool hasAccpetTableQuality(Widget w);
...
Widget aWidget;
if(hasAccpetTableQuality(aWidget))...
这段代码中,进行了 **pass by value **,将aWidget复制到了w体内,复制动作由copy构造完成。
· 被讨厌的#define,用 const,enum,inline 来替换
#define CALL_WITH_MAX(a,b) f((a) > (b) ? (a):(b))
int a = 5,b = 0;
CALL_WITH_MAX(++a,b); //a累加两次
CALL_WITH_MAX(++a,b+10); //a累加一次
这是很奇怪的现象,对于C++编程人员来说不确定而又奇怪的事事不允许发生的。此外宏定义不可以被用与类当中,而且在预编译时,可能没被感知到,编译器不知道其他文件中被宏定义的变量是啥。
·更多的选择 const
特定的变量不想被修改?那就选择 const。想告诉其他人别在自己写好类成员函数内部做”动作“?选择 const 修饰成员函数!
当然,如果要在 const 成员函数内做一些变量的赋值,那可以在变量声明时(声明肯定不能在 const 函数内),为变量添加 mutable 关键字。
通常对于返回型的成员函数要写出 const 版本和非 const 版本,但代码重复是一件不怎么好的事。既然如此,就只将 const 版本的返回型成员函数完全实现好,非 const 版本的返回型成员函数实现可以只需使用 const_cast< type >( ) 关键字把常量性转除后用以 return 即可,有一点要知道,再使用 const_cast< type >()转除前,要将传入的对象转成 const 型的,因为要明确调用的是const类型的返回成员函数,而不是自身。
为什么不是 const 版本的调用 非 const 版本的呢。如果这样做的话,会不会显得我们不够守信呢,你需要做的是 在 const 版本的函数内将 *this 身上的 const性质解除,然后再做 return 。可 const 版本本意就是告诉别人不要在此做修改,如此调用非 const 版本就不正是要对其做修改了么。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)