![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++ 11
幸福的起点_
搬砖ing
展开
-
c++中使用空指针调用成员函数的理解
使用空指针调用成员函数会如何?举个例子:base是基类,里面有两个函数:non-virtual func2 以及 virtual func1; derived是派生类,使用public继承自base,里面有四个函数:virtual func1,non-virtual func3,non-virtual func4以及static non-virtual func5,特别注意:func4调用了...原创 2018-05-03 12:07:11 · 3016 阅读 · 2 评论 -
《Effective C++》读书笔记第二章:构造析构赋值运算
Constructor, Destructors and Assignment Operator条款5.了解C++默默编写并调用了那些函数如果声明一个空类,编译器会为这个空类声明拷贝构造函数,拷贝赋值运算符,默认构造函数以及析构函数,并且这些都是public且是inline,还是trivial(平凡的,无价值的)。 对于trivial,我的理解是: - 比如trivial defaul...原创 2018-06-10 22:20:06 · 204 阅读 · 0 评论 -
《Google C++编码规范》读书笔记第三章:类
《Google C++编码规范》第二章:类类是C++中的基本单元。一.构造函数的职责(constructor)在构造函数执行那些trivial的初始化,可能的话,使用Init()函数执行那些non-trivial的初始化。 定义:执行初始化操作。 优点:排版方便,无需担心类是否初始化。 缺点: - 构造函数中不易报告错误,不能使用异常 - 操作失败会引起对象初始化失败,导...原创 2018-06-29 20:33:48 · 215 阅读 · 0 评论 -
C++11一些新特性
C++11一些新特性一.可变参数模板(Variadic Templates)新特性允许模板定义中含有任意多个的模板参数,这种新特性的写法与普通模板是差不多的,只是加上了省略号...。 省略号的作用: 1. 声明一个参数包,这个参数包可以包含一个或者任意个模板参数。 2. 在模板定义的右边,可以将参数包展开成一个一个独立的参数。 举个简单的例子:void print() ...原创 2018-07-01 22:21:15 · 213 阅读 · 0 评论 -
C++字符串与C语言中的字符串处理函数
C++字符串与C语言中的字符串处理函数一.C++中的字符串类下面是简单的一种实现:#ifndef STRING_H_INCLUDED#define STRING_H_INCLUDEDclass String{public: String (const char* cstr = 0); String (const String&); St...原创 2018-07-02 22:55:56 · 769 阅读 · 0 评论 -
《Google C++编码规范》读书笔记第一章:头文件
《Google C++编码规范》:第一章.头文件c++源文件在windows系统.cpp,在Linux/Unix下则为.cc,通常一个源文件对应一个.h头文件。正确使用头文件令代码在可读性,性能上都有很大的改观1.#define的保护#define是一种防御式声明,防止头文件被多重包含,命名格式:<PROJECT>_<PATH>_&a原创 2018-06-27 20:25:50 · 240 阅读 · 3 评论 -
C++资源管理之智能指针
C++资源管理之智能指针在《Effective C++》一书中,大师Scott Meyers用了一章的篇幅来说明C++资源管理的一些内容,本文以此为基础。 1.RAIIRAII:Resourse Acquisition Is Initialization(资源获取即初始化),将资源放到管理对象中,管理对象使用析构函数来确保资源释放。2.常见的智能指针常见的智能指针有这些:...原创 2018-06-27 22:09:49 · 151 阅读 · 0 评论 -
《Google C++编码规范》读书笔记第二章:作用域
《Google C++编码规范》第二章:作用域一.命名空间(namespace)定义:命名空间将全局作用域分成不同的、具名的作用域。 优点:命名空间可有效防止全局作用的命名冲突,例如两个命名空间pro1::Foo和pro2::Foo就不会冲突。 缺点:命名空间具有迷惑性,在头文件中使用不具名的空间容易违背C++的唯一定义原则(One Definition Rule, ODR)(在此...原创 2018-06-28 21:33:28 · 331 阅读 · 0 评论 -
C++从内存分区到动态内存分配
C++从内存分区到动态内存分配一.C++内存分区C++内存分区分为五个部分: 堆,栈,自由存储区,常量存储区,静态/全局存取区。 - 堆:new分配的内存块,程序员使用完必须自己delete,如果忘记,操作系统会在程序结束后释放该内存。 - 栈:编译器需要时自动分配内存,常见的比如局部变量、函数参数等。 - 自由存储区:由malloc分配的内存块,和new类似,需要自己使用fr...原创 2018-07-19 20:25:37 · 315 阅读 · 0 评论 -
《More Effective C++》读书笔记第二章:操作符
第二章:操作符条款五.对定制的类型转换函数保持警觉一个类中的隐式类型转换符的形式是:operator type();这是一个有点奇怪的函数:关键词operator加上一个类型名称再加上一个括号。例如有理数类:class Rational {public: Rational(int numerator = 0, int denominator = 1); ...原创 2018-06-13 22:24:09 · 166 阅读 · 0 评论 -
《More Effective C++》读书笔记第一章:基础议题
第一章:基础议题条款一.仔细区分pointers和references首先,没有NULL reference(空引用),但是可以有NULL pointer(空指针)。考虑这样的情况:char *pc = 0;char& rc = *pc;这难道就是空引用了吗?错,这是未定义的行为,编译器可能产生任何输出,要杜绝这种行为,所以千万不要考虑让reference成为NU...原创 2018-06-12 22:10:35 · 208 阅读 · 0 评论 -
《Effective C++》读书笔记第一章:让自己习惯c++
Accustoming Youself to C++条款1.视c++为一个语言联邦C++是个多重范型编程语言,同时支持过程形式、面向对象形式、函数形式、泛型形式、元编程形式。视c++为一个语言联邦,包括以下四个部分:C. C++说到底还是以C为基础。这是面向过程的部分,C与C++相比,少了模板、异常以及重载。Object-Oriented. 面向对象部分,包括封装、继承、多态以及虚...原创 2018-05-17 09:45:05 · 256 阅读 · 0 评论 -
《深度探索C++对象模型》读书笔记第一章:关于对象
《深度探索C++对象模型》读书笔记之 关于对象前言c语言中,“数据”和“处理数据的操作(函数)” 是分开声明的,将这种程序方法称为程序性(procedural),比如声明一个struct Point3d:struct Point3d { float x; float y; folat z;};而操作该数据数据的函数例如打印函数,只能另外定义成:vo...原创 2018-05-21 13:37:11 · 2150 阅读 · 2 评论 -
《深度探索C++对象模型》读书笔记第五章:构造析构拷贝语意学
《深度探索C++对象模型》读书笔记第五章:构造析构拷贝语意学对于abstract base class(抽象基类),class中的data member应该被初始化,并且只在constructor中或者在其他member functions中指定初值。纯虚函数的存在纯虚函数,虚函数在声明后加上 = 0,纯虚函数的意义在于只定义一个可继承的接口,并没有实现(虚函数意义在于定义一个可继...原创 2018-05-25 14:45:09 · 836 阅读 · 3 评论 -
《深度探索C++对象模型》读书笔记第四章:Function语意学
一.Nonstatic Member Functions(非静态成员函数)准则:非静态成员函数至少和一般的非成员函数有相同的效率。编译器内部已经将成员函数转换为非成员函数。 转换分为三个部分: - 1.添加this指针为函数的第一个参数,如果成员函数是const, 那么this指针的类型为: const className * const this;并且对每一个nonstatic da...原创 2018-05-16 10:34:56 · 954 阅读 · 0 评论 -
斐波那契数列及其对数时间算法
斐波那契数列及其对数时间算法前些天做IEEE校内算法赛的时候,遇到了一道关于斐波那契数列的题,要求是对数时间;今天在牛课网上刷leetcode,看到爬楼梯问题,于是在网上搜索了一下,自己参考并总结了下斐波那契数列及其算法。主要参考了知乎这个问题下的回答最高赞回答。 斐波那契数列大家应该都很熟悉:0 1 1 2 3 5 8… ,递推公式如下: f(n)={f(n−1)+f(n−2)if2≤n...原创 2018-05-22 16:55:32 · 1774 阅读 · 0 评论 -
《深度探索C++对象模型》读书笔记第二章:构造函数语义学
《深度探索C++对象模型》读书笔记之 构造函数语义学编译器背着程序员做了很多事,explicit关键字的导入,是为了制止“单一参数的constructor”被当作一个conversion运算符。这一章中,挖掘了编译器对于“对象构造过程”的干涉,以及对于“程序形式”和“程序效率”的冲击。 一.Defalut Constructor的构造过程关键:是编译器需要(就会合成默认构造函数)...原创 2018-05-23 17:05:43 · 696 阅读 · 2 评论 -
《深度探索C++对象模型》读书笔记第三章:Data语意学
《深度探索C++对象模型》读书笔记之 Data语意学类的大小(sizeof)一个空类的大小通常为1,是因为编译器为其安插了一个char,以便这个类的任意两个object能够在内存中配置独一无二的地址。 一个类的大小通常与机器和编译期有关,受以下三个因素的影响: 1. 语言本身的额外负担 比如支持虚函数,或者虚继承。 2. 编译器对于特殊情况的优化处理 某些编译器会对empty...原创 2018-05-24 13:11:50 · 907 阅读 · 2 评论 -
《深度探索C++对象模型》读书笔记第六章:执行期语意学
《深度探索C++对象模型》读书笔记第六章:执行期语意学C++在执行期的一些变化,例如临时对象的产生,临时对象的构造和析构成本是我们需要考虑的,我们将在第三节具体讲解。一.对象的构造和析构一般而言,我们将object尽可能放置在使用它的那个程序区段附近,这样可以节省非必要的对象的构造和析构成本。全局对象已经初始化全局对象均存储在data segment(数据段),未初始化...原创 2018-05-29 17:24:57 · 452 阅读 · 0 评论 -
基本输入输出和复合数据类型
基本输入输出头文件包含:stdio.h1.格式化输入输出输出:printf("格式化控制字符串", 输出项);“格式化控制字符串”的形式为: 格式化输出函数printf:%[输出最小宽度][.精度][长度]类型例如:double d = 123.456;print("d=%9.2f", d)原创 2018-08-30 16:02:10 · 242 阅读 · 0 评论