C/C++
文章平均质量分 59
对面『胶己人』
This is my note, not my blog
展开
-
C++11多线程编程系列(二)实战
C++11 新标准中引入了多个头文件来支持多线程编程,他们分别是<atomic> ,<thread>,<mutex&原创 2018-03-13 12:16:02 · 7078 阅读 · 0 评论 -
第三章 字符串,向量和数组
C++原创 2018-03-06 13:26:28 · 161 阅读 · 0 评论 -
sizeof操作符的使用
重学C++ (三) 表达式(含sizeof的使用细节)结构和联合的区别关于struct结构体填充造成的字节数的问题默认的对齐方式应该遵循两个原则: 1. 结构体中的每个成员变量的起始地址都应该是其所占字节数的倍数。 2. 整个结构体所占字节数应该是其最大成员变量所占字节数的倍数。自己设定对齐方式: 例如编译器提供#pragma pack(n) 来设定变量以n字节对...原创 2018-03-06 14:32:19 · 170 阅读 · 0 评论 -
C++变量/函数 声明与定义 源文件与头文件
C++有分离式编译,可以将一个程序分为多个源文件独立编译,再通过链接合并到一起。.h文件的作用只是在源文件中include,不会单独被编译。如果在不同源文件间需要共享全局变量,这时就需要extern发挥作用。extern用于声明,声明可以声明多次,定义只能有一次。因为头文件可能会被多个源文件包含,所以全局变量的定义不可放在头文件中,否则会导致全局变量多重定义。看下面的例子://1.cp...原创 2018-03-06 16:13:13 · 3844 阅读 · 0 评论 -
C++11多线程编程系列(一)左值右值,move,ref 讲解
左值and右值左值指的是可以取地址的变量,记住,左值与右值的根本区别在于能否获取内存地址,而能否赋值不是区分的依据。通常临时量均为右值。对于自定义的类型(user-defined types),右值却允许通过它的成员函数进行修改。 右值只能被 const reference 指向。c++中的左值与右值move怎样理解 C++ 11中的move语义若一同提供复制与移动...原创 2018-04-01 15:25:06 · 1746 阅读 · 0 评论 -
select用法&原理详解(源码剖析)
最近刚接触Linux下的select用法,查阅了很多资料终于懂得了一丁点,故将自己查阅后有用的资料整理在这下面。博客链接都是很有价值,写的很好的文章。在研读源码时主要看的是这篇文章:深入select多路复用内核源码加驱动实现 自己能力精力有限,没有办法自己写一篇完完整整的文章,故只能当个搬运工了,文章先后顺序尽量按照了知识点的先后~~如果有什么问题欢迎一起探讨学习~前期知识在开始接触s...原创 2018-04-02 20:11:53 · 70700 阅读 · 10 评论 -
poll/epoll用法简述
struct pollfd { int fd; //文件描述符 short events; //要求查询的事件掩码 short revents; //返回的事件掩码 }; int poll(struct pollfd *ufds, unsigned int nfds, int timeout); struct pollfd * fds:是一个stru...原创 2018-04-03 06:31:58 · 674 阅读 · 0 评论 -
C程序理解(栈,GCC,.h文件)
.h .lib .dll文件.h文件是编译器编译时必须要的,预处理会找到相对应的头文件中的声明,才可以顺利完成编译。如果这个文件中某个函数使用没有在本文件中声明,也没有在包含的头文件中声明,就会出错。.lib是链接时必须的, 告诉链接器调用的函数在哪个DLL中,函数执行代码在DLL中的什么位置,它起到桥梁的作用。如果生成静态库文件,则没有DLL ,只有lib,这时函数可执行代码部分也在li...原创 2018-04-20 20:20:56 · 611 阅读 · 0 评论 -
《Effective C++》让自己习惯C++
构造函数声明为explicit更好, 禁止编译器执行非预期的类型转换,但仍然可以强制转换。class widget;widget a = b; //调用copy构造函数widget c;c = b; // 调用copy赋值运算符bool text(widget a);text(c) //调用copy构造函数,其实使用常量引用是更加推荐的做法条款01:视C++为一个语言...原创 2018-06-19 16:16:47 · 187 阅读 · 0 评论 -
第二章 变量和基本类型
切勿混用带符号数和无符号数:#include <iostream>using namespace std;int main(){ int a = -1; unsigned int b = 3; if (a < b) cout << "yes!" << endl; else co...原创 2018-03-06 10:57:10 · 125 阅读 · 0 评论 -
C++回顾之模板与泛型编程
OOP能处理类型在程序运行之前都未知的情况;而在泛型编程中,在编译时就能获知类型了。编译器会根据类型生成相应的模板实例。unsigned不加类型名时,默认表示无符号整型。非类型模板参数函数模板和类模板成员函数的定义通常放在头文件中。一个类模板的成员函数只有当程序用到它时才进行实例化。在一个类模板的作用域内,我们可以直接使用模板名而不必指定模板实参。当我们在模板外定义成员时,必须记住我们...原创 2018-03-11 13:15:53 · 167 阅读 · 0 评论 -
C++回顾之面向对象程序设计
核心思想:数据抽象,继承和动态绑定(一定程度上忽略类型的区别)。虚函数:基类希望它的派生类各自定义适合自己的版本,则将函数声明为虚函数。函数声明前加上virtual 派生类中实现虚函数时在函数声明尾加上override,前面可以加上virtual也可以不加。一旦某个函数被声明成虚函数,则在所有派生类中它都是虚函数。protected:派生类有权访问该成员,但是禁止其他用户访问。虚函数的解...原创 2018-03-11 10:45:00 · 145 阅读 · 0 评论 -
C++命名空间,标准库,标准模板库
全局空间与命名空间我们在使用C++时,导入头文件一般有两种形式,带‘.h’和不带‘.h’。一般来说,不带‘.h’的是C++的标准头文件,带的是C语言的,‘.h’里面定义的所有类以及对象都是在全局空间里,不带的是在命名空间std里面。C++要兼容C的标准库,而C的标准库里碰巧也已经有一个名字叫做“string.h”的头文件,包含一些常用的C字符串处理函数,比如strcmp。 这个头文件跟C++原创 2018-01-20 17:12:13 · 374 阅读 · 0 评论 -
C++回顾之函数
局部静态对象:第一次经过对象定义语句时初始化,之后不再执行初始化语句,直到程序终止对象才会被销毁。给函数传递参数时尽量使用引用避免拷贝,同时如果函数无须改变引用形参的值,最好将其声明为常量引用,这很重要,能够避免很多错误。顶层const和底层const。顶层const是指针本身是const不可改变值,底层const是指针指向的对象是const不可修改指向对象的值。函数返回局部对象的引用和局...原创 2018-03-06 18:57:58 · 143 阅读 · 0 评论 -
cout cerr clog的使用区别
对于这三个输出流的使用一直都有困惑,平时用的比较多的其实一直都只有cout。今天特意查了一下:What is the difference between cout, cerr, clog of iostream header in c++? When to use which one? C++中cout,cerr,clog的区别看完之后大致明白了使用上的区别了:cout 是用...原创 2018-02-15 00:35:11 · 510 阅读 · 0 评论 -
C++回顾之类
定义在类内部的函数是隐式的inline函数。常量成员函数:默认情况下隐式的this的类型是指向类类型非常量版本的常量指针,即自身是常量,但是指向的对象不是常量,为了使得this能绑定到一个常量对象(如const),则在函数后面加上const。但是这样子就不可以改变调用它的对象的数据成员。#include <iostream>using namespace std;cla...原创 2018-03-08 14:22:16 · 157 阅读 · 0 评论 -
C++回顾之IO
IO类型在三个独立的头文件中定义: iostream定义读写控制窗口的类型; fstream定义读写已命名文件的类型; sstream定义读写存储在内存中的string对象;IO对象无拷贝或赋值,读写一个IO对象会改变其状态,因此不能为const。确定一个输入符合要求的最简单方法: int temp = 0; //当输入的是字符的话就不会执行if语句。 if...原创 2018-03-08 15:15:47 · 160 阅读 · 0 评论 -
C++回顾之顺序容器
顺序容器类型:vector deque(双端队列,也可快速随机访问)list(双向链表)forward_list(单向链表) array(比内置数组更安全) stringstring 和 vector 都是将元素保存在连续的内存空间。快速随机访问,但插入删除就很慢。应该使用标准庫容器,而不是原始的数据结构,如内置数组。元素初始化器(295页)forward_list迭代器不支持递减运算符...原创 2018-03-08 16:43:38 · 120 阅读 · 0 评论 -
C++回顾之泛型算法
泛型算法介绍泛型算法大多数是独立于任何特定的容器的,定义在头文件algorithm和numeric中,算法不直接操作容器,而是遍历由两个迭代器指定的一个元素范围。泛型算法种类只读算法find(vec.cbegin(),vec.cend(),0);//返回迭代器 count(vec.cbegin(),vec.cend(),0);//返回给定值在序列中出现的次数int ...原创 2017-01-23 19:44:20 · 356 阅读 · 0 评论 -
C++回顾之泛型算法(二)
谓词概念解释:谓词是一个可调用的表达式(可能是一个函数),其返回结果是一个能用作条件的值。一元谓词表明这个谓词只接受一个参数(函数只有一个参数)二元谓词表明这个谓词只接受两个参数(函数只有两个参数) 算法谓词, 即标准库算法传递的参数, 可以指定算法的操作, 如std::sort, 默认是从小到大, 通过谓词可以修改从大到小. 常见的五种谓词: 函数,函数指针,lambda表达式,...原创 2018-03-08 19:47:07 · 174 阅读 · 0 评论 -
C++回顾之动态内存
每个程序的内存空间静态内存:局部static对象,类static数据成员以及定义在函数体外的变量栈内存:函数内的非static变量堆:动态分配(程序在运行时分配的对象,生存期由程序控制) shared_ptr的使用//也可以使用autoshared_ptr<string> p = make_shared<string>(10, '9');每个shared...原创 2018-03-10 15:36:28 · 140 阅读 · 0 评论 -
CCF认证 Markdown
CCF MarkDown 转化器原创 2017-09-15 21:36:58 · 394 阅读 · 1 评论