c++11学习笔记(1)
(1)引用是为了尽量避免拷贝操作,节省空间。
(2)函数只能返回一个数值,使用引用可以间接返回多个数值。
(3)要尽量使用常量引用,不能把const对象、字面值或者需要类型转换的对象传递给普通的引用形参。
(4)当数组作为形参的时候。因为不能拷贝数组,所以我们无法以值传递的方式使用数组参数。因为数组会被转换成指针,所以当我们为函数传递一个数组的时候,实际上传递的是指向数组首元素的指针。
(5)顶层const是指针常量,就是这个指针地址不能再变,但是内容可以改变。语法规则就是const必须在*后面
int *const a = &b
(6)底层const是指指针地址可以改变,但这个地址存放的数值不能改变了,也就是说解引用不能赋值。
int const *a = &b const int *a = &b
(7)在类的成员函数末尾加上const称为常量成员函数,定义一个常量成员函数实质上是把this指针在该成员函数内定义成指向常量的常量指针。因此,常量成员函数体内this指针不能重新定向,它总是指向调用该常量成员函数的对象。而且,该对象的数据成员也不能被修改。
(8)每个类成员函数里面有个隐式的this指针,当模仿内置运算符的时候要返回引用类型,采用return *this的方式进行返回,这样就可以返回当前的引用。
(9)默认情况下,拷贝类的对象其实拷贝的是对象的数据成员。
(10)构造函数没有返回类型,不能被声明成const的,构造函数在const对象的构造过程中可以向其写入数值。
(11)合成的默认构造函数只适合非常简单的类,对于一个普通的类。必须定义它自己的默认构造函数。
(12)
sales_data(const string &s, unsigned n, double p): bookno(s), units(n), revenue(p*n)
{ }
那个部分叫做构造函数初始值列表。
(13)如果在类的外部定义构造函数,以is stream为参数的构造函数需要执行一些实际的操作,比如调用read函数给数据成员赋以初值。
(14)很多需要动态内存的类能够使用vector对象或者string对象管理必要的存储空间。使用这两种类能避免分配和释放内存带来的复杂性。如果类包含vector或者string成员,则其拷贝、赋值和销毁的合成版本能够正常工作。
(15)private成员可以被类的成员函数访问,但是不能被使用该类的代码访问。
(16)struct和class的默认访问权限不太一样。类可以在它的第一个访问说明符之前定义成员,对这种成员的访问权限依赖于类定义的方式。如果我们使用struct关键字,则定义在第一个访问说明符之前的成员是public的。
(17)类可以允许其他类或者函数访问它的私有成员,方法是另其他类或者成员函数成为它的友元。如果类想把一个函数作为它的友元,只需要增加一条以friend关键字开始的函数声明语句即可。
class saledata{ friend saledata add(const saledata& , const saledata&) public private }
友元声明只能出现在类定义的内部,但是在类内出现的具体位置不限。一般来说,最好在类开始或结束前的位置集中声明友元。
注意是独立于public和private的。
(18)封装的好处就在于,一个是确保用户代码不会无意间破坏封装对象的状态。
第二个是被封装的类的具体实现细节可以随时改变,而无需调整用户级别的代码。
(19)把数据成员的访问权限设成private还有另外一个好处,能够防止由于用户的原因造成数据被破坏。如果我们发现有程序缺陷破坏了对象的状态,也可以在有限的范围内定位缺陷。将查错限制在有限范围内能极大降低维护代码和修正程序错误的速度。
(20)
typedef std:: string::size_type pos
等价的可以使用类型别名如下
using pos = std::string::size_type
(21)有时候(但并不频繁)会发生这样一种情况,我们希望能修改类的某个数据成员,即使是在一个const成员函数内,可以通过在变量的声明中加入mutable关键字做到这一点。
class screen{ public: void some_member() const; private: mutable size_t access_ctr;
//即使在一个const对象内也能被修改}
void screen:: some_member() const { ++ access_str; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下