C++ 类与类型:从基础到高级应用
1. 类与类型概述
在编程中,我们并不一定要摒弃普通整数和其他内置类型,转而使用包装类。例如在计算和管理 BMI 的程序中,使用普通的 int 变量,并通过仔细编码和校对来防止和检测错误,是一种可行的做法。但在大型程序中,如果身高和体重等数据频繁出现,使用包装类可以减少错误,还能添加错误检查、对值的范围施加约束等。
2. 值类型
值类型(如身高和体重类型)的行为类似于普通值,与 I/O 流类型有很大不同。I/O 流类型不能复制或赋值,必须通过引用传递给函数,也不能进行比较或算术运算。而值类型设计上与内置类型(如 int 和 float)行为相似,重要特性之一是可以存储在容器(如 vector 和 map)中。
值类型的基本准则是使其行为“像 int”,在复制、比较和执行算术运算时,要尽可能与内置类型保持一致,避免意外情况。
3. 复制操作
复制 int 会得到一个与原 int 无法区分的新 int,自定义类型也应如此。以 string 为例,不同的实现方式对复制有不同的优化:
- 写时复制(Copy-on-Write)实现 :实际字符串内容与字符串对象分开存储。字符串对象的副本在需要修改内容之前不会复制内容,避免了不必要的复制。
- 小字符串优化实现 :小字符串的内容存储在字符串对象中,大字符串单独存储。复制小字符串很快,但复制大字符串较慢。
通常,编译器的自动复制构造函数能满足需求,但我们仍需思考复制操作,确保自动复制构造函数符合我们的期望。
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



