![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++语言
文章平均质量分 86
介绍C++语言内容
questions?
Hold on
展开
-
后台开发核心技术与应用实践看书笔记(三):常用STL的使用
copy(p,n,size_type_Off=0)这句表明从string类型对象中至多复制n个字符到字符指针p指向的空间中,并且默认从首字符开始,也可以指定开始位置(从0开始计数)。如果格式化后的字符串长度不小于size,则只将其中的(size-1)个字符全部复制到str中,并且加上结束符’\0’但是vector的拷贝构造函数只分配拷贝的元素需要的内容,所以这个临时vector没有多余的容量。然后这个语句结尾处,临时vector被销毁,以释放以前ivec使用的内存,收缩到合适的大小。功能是:将可变个参数…原创 2023-10-09 21:51:22 · 268 阅读 · 0 评论 -
后台开发核心技术与应用实践看书笔记(二):面向对象的C++
基类成员函数声明为虚函数后(派生类的同名函数自动成为虚函数,但最好还是加上virtual,如果派生类没有对基类的虚函数重新定义,则派生类简单地继承其直接基类的虚函数),可以通过指向基类的指针指向同一类族中不同类的对象,从而调用其中的同名函数。可能出现有些基类的成员,派生类用不到,造成数据冗余,多次派生后,就存在大量无用的数据,不仅浪费空间,而且在对象的建立,赋值,复制和参数的传递中,花费许多无谓的空间,降低效率。系统在进行动态关联时的时间开销是很少的,因此,多态是高效的。函数代码是存储在对象空间之外的。原创 2023-10-07 21:03:31 · 379 阅读 · 0 评论 -
Effective C++看书笔记(9):杂项讨论
c++98列入的C++标准程序库主要成分。TR1有14个新组件。原创 2023-10-06 11:51:54 · 168 阅读 · 0 评论 -
Effective C++看书笔记(6):继承与面向对象设计
即不要覆盖父类的普通函数。讨论的继承一个带有缺省参数值的virtual函数virtual函数是动态绑定,缺省参数值是静态绑定。原创 2023-10-06 11:50:51 · 139 阅读 · 0 评论 -
Effective C++看书笔记(5):实现
只要定义了一个变量而且其类型带有一个构造函数或析构函数。那么程序到达这里时就要承受构造成本,离开时就要承受析构成本。即使这个变量并未最终被使用,所以要尽量避免这种情况。方法就是尽可能延后定义变量,尽量定义变量时使用有参构造函数直接一次性弄好,避免无意义的默认构造行为。例子if(...)这样如果有异常就没用到变量改进if(...)这样就是无意义的默认构造行为,后面再赋值,效果仍不好。等待真正使用才定义比较好if(...)循环怎么办变量定义在循环外,性能更好,但是变量作用域更大。原创 2023-10-06 11:47:35 · 137 阅读 · 0 评论 -
Effective C++看书笔记(4):设计与声明
比如:以指针指向一个对象,内含真正数据那种类型,即pimpl,pointer to implementation。(函数参数以实参的复制副本为初值,调用端返回的也是函数返回值的一个复件)。const是必要的,因为传的是引用,可以真正更改了,如果不需要更改就需要加上const。阻止误用包括建立新类型,限制类型上的操作,束缚对象值,以及消除客户的资源管理责任。比如计算函数里面,就必须返回结果的副本,否则返回引用,函数一结束,副本就没了。一般情况,内置类型和STL的迭代器和函数对象都pass by value。原创 2023-10-06 11:44:31 · 108 阅读 · 0 评论 -
Effective C++看书笔记(3):资源管理
auto_ptr和shared_ptr(一般都用这个),两者都在其析构函数内做delete而不是delete[]动作,所以不要在动态分配得到的array身上使用auto_ptr或tr1::shared_ptr。为了预防这个问题,auto_otr有一个不寻常的性质:若通过copy构造函数或copy assignment操作符复制它们,它们会变成null,而复制所得的指针将取得资源的唯一拥有权。如果资源不是在堆上,那么auto_ptr和tr1::shared_ptr就不适合了。两个都必须严格对应原来的形式。原创 2023-10-06 11:41:02 · 97 阅读 · 0 评论 -
后台开发核心技术与应用实践看书笔记(一):C++编程常用技术
define用来将一个标识符(宏名)定义为一个字符串(替换文本)。在简单宏定义的使用中,当替换文本所表示的字符串是一个表达式时,需要加上括号,否则容易引起误解和误用。比如#define N29int main()int a=N*N;return 0;因为宏展开是在预处理阶段完成的,这个阶段把替换文本只是看作一个字符串,并不会有任何的计算发生,在展开时是在宏N出现的地方只是简单地使用串2+9来代替N,并不会增添任何的符号。所以该程序展开后的结果是a=2+9*2+9,计算后的结果为29。原创 2023-10-06 11:35:25 · 169 阅读 · 0 评论 -
Effective C++看书笔记(2):构造/析构/赋值运算
问题:Transaction构造函数最后一行调用了logTransaction,这个时候调用的是Transaction的版本,而不是ButTransaction的版本。基类指针指向子类对象,如果基类的析构函数是non-virtual,那么会导致析构时只析构了基类的部分,但是没有析构掉子类的部分。当对象调用某一virtual函数,实际被调用的函数取决于该对象vptr所指的那个vtbl——编译器在其中寻找适当的函数指针。解决办法:把不想生成的函数,自己来定义,声明为private,代表不使用。原创 2023-09-24 12:03:44 · 95 阅读 · 0 评论 -
Effective C++看书笔记(1):让自己习惯C++
对C内置类型(比如int这种)而言pass-by-value一般比传递引用更高效,但是在Object Oriented C++中由于用户自定义构造函数和析构函数的存在,传递const引用往往更好,运用Template C++同样如此,因为你都不知道对象类型是什么。所以声明迭代器为const,也就是声明了一个常量指针,T* const,表名这个迭代器不能改变,但是它指向的东西的值可以改变。然而在STL中,迭代器和函数对象都是在C指针上面塑造出来的,所以STL的迭代器和函数对象,C的传递值守则更好。原创 2023-09-23 12:16:08 · 67 阅读 · 0 评论