![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++
文章平均质量分 83
闰土少年与猹
这个作者很懒,什么都没留下…
展开
-
C++关键字学习 -- volatile
一、volatile 介绍参看:volatile详解参看:C Language KeywordsIndicates that a variable can be changed by a background routine.Keywordvolatileis an extreme opposite ofconst.It indicates that a variable may be changed in a way which is absolutely unpredicta...原创 2021-02-18 18:00:32 · 1281 阅读 · 0 评论 -
boost::shared_ptr 分析与实现
boost::shared_ptr 分析与实现、boost::shared_ptr 分析与实现/************************************************************* file: shared_ptr** desc: 本文将对boost::shared_ptr作一详细的介绍。 本文介绍的不是用法,而是* 智能指针的原理,结构以及boost对其的实现. 最后还会给出一个简化了的实现。** author: whiteear* date..转载 2021-02-18 15:42:57 · 963 阅读 · 0 评论 -
模板函数参数完美转发
右值引用首先我们先来看一下传统的左值引用。<span style="color:#000000"><code>int main(){ int a = 10; int &b = a; // 定义一个左值引用变量 b = 20; // 通过左值引用修改引用内存的值 return 0;}</code></span>反汇编如下:<span style="color:#000000"><code>int原创 2021-02-10 14:23:47 · 393 阅读 · 0 评论 -
C++编译模式
一、C++编译模式通常,在一个C++程序中,只包含两类文件——.cpp文件和.h文件。其中,.cpp文件被称作C++源文件,里面放的都是C++的源代码;而.h文件则被称作C++头文件,里面放的也是C++的源代码。C+ +语言支持“分别编译”(separate compilation)。也就是说,一个程序所有的内容,可以分成不同的部分分别放在不同的.cpp文件里。.cpp文件里的东西都是相对独立的,在编 译(compile)时不需要与其他文件互通,只需要在编译成目标文件后再与其他的目标文件做一次链接(link原创 2021-01-25 17:27:13 · 523 阅读 · 2 评论 -
关于c++的头文件依赖
关于c++的头文件依赖正在看google c++编程规范,里面对头文件依赖是这么说的:使用前置声明(forward declarations)尽量减少.h文件中#include的数量。当一个头文件被包含的同时也引入了一项新的依赖(dependency),只要该头文件被修改,代码就要重新编译。如果你的头文件包含了其他头文件,这些头文件的任何改变也将导致那些包含了你的头文件的代码重新编译。因此,我们宁可尽量少包含头文件,尤其是那些包含在其他头文件中的。使用前置声明可以显著减少需要包含的头文件数原创 2021-01-07 16:56:00 · 540 阅读 · 1 评论 -
C++11多线程 detach和join的区别
多线程编程是必须要掌握的,以前多线程基本是靠系统API或者第三方库完成的,比如windows的API函数CreateThread,linux创建线程函数pthread_create,但是这样编写的代码不可移植,不能跨平台,比如windows的多线程程序拿到linux下是跑不起来的,相反也一样,很不方便,然而C++11语言本身支持多线程,和平台无关,下面就来简单认识多线程# include<iostream># include<thread>//C++...原创 2021-01-06 22:12:10 · 1081 阅读 · 1 评论 -
内存对齐算法
//(32bit,x86环境,vs2010)struct test{ char m1; unsigned int m2; char m3; double m4; char m5;};对其执行sizeof(test),得到值为32,并且我们对里面每个变量取sizeof,确实是所属类型的大小,但为什么不是1+4+1+8+1=15呢,我们执行下面代码来计算每个变量之间的地址偏移量: test t;...原创 2020-07-21 14:05:45 · 319 阅读 · 0 评论 -
C++类大小详尽讲解
https://blog.csdn.net/longjialin93528/article/details/80160467原创 2020-07-21 13:08:30 · 140 阅读 · 0 评论 -
hashmap
HashMap原理:https://www.jianshu.com/p/dde9b12343c1LinkedHashMap(线程安全):原理https://www.jianshu.com/p/8f4f58b4b8abSTL的map和hashmap比较:https://blog.csdn.net/lyq_csdn/article/details/80630872原创 2020-07-15 23:48:42 · 120 阅读 · 0 评论 -
结构体作为map的键值
这里首先给出容器map的原型: 1 2 3 4 5 6 7 8 template< classKey, classT, classCompare = less<Key>, classAlloc = alloc> classmap{ ... } 可以看到模板参数一共有四个,第...原创 2020-06-25 14:03:16 · 1038 阅读 · 0 评论 -
C++ 杂项知识
c++子类和父类成员函数重名1.子类和父类返回值参数相同,函数名相同,有virtual关键字,则由对象的类型决定调用哪个函数。2.子类和父类只要函数名相同,没有virtual关键字,则子类的对象没有办法调用到父类的同名函数,父类的同名函数被隐藏了,也可以强制调用父类的同名函数class::funtion_name。3.子类和父类参数不同,函数名相同,有virtual关键字,则不存在多态...原创 2020-05-08 10:53:23 · 163 阅读 · 0 评论 -
深入理解正则表达式高级教程
http://www.zjmainstay.cn/deep-regexp#%E6%A6%82%E5%BF%B5%E4%B8%89%E8%B4%AA%E5%A9%AA%E6%A8%A1%E5%BC%8F%E4%B8%8E%E9%9D%9E%E8%B4%AA%E5%A9%AA%E6%A8%A1%E5%BC%8F转载 2020-04-21 14:58:42 · 139 阅读 · 0 评论 -
C++正则表达式(regex_match、regex_search与regex_replace)
前言 1 转义字符 2 regex_match 2.1 基本概念 2.2 匹配结果 2.3 实例 3 regex_search 3.1 基本概念 3.2 实例 4 regex_replace 4.1 基本概念 4.2 扩展 5 匹配忽略大小写 6 帮助网站1 转义字符cout << regex_match("123", regex(...原创 2020-04-17 18:36:58 · 6037 阅读 · 0 评论 -
容器的比较
1)vector内部数据结构:数组。在末尾增加或者删除元素所需时间与元素数目无关,在中间或者开头增加或者删除元素所需时间是随元素数目呈线性变化。2):deque内部数据结构是:数组随机访问每个元素,所需要的时间为常量。在开头和末尾增加元素所需时间与元素数目无关,在中间增加或删除所需时间随元素数目呈线性变化。3)list内部数据结构:双向环状链表不能随机访问一个元素,...转载 2019-03-20 16:43:47 · 116 阅读 · 0 评论 -
友元(友元函数、友元类和友元成员函数) C++
友元(友元函数、友元类和友元成员函数) C++有些情况下,允许特定的非成员函数访问一个类的私有成员,同时仍阻止一般的访问,这是很方便做到的。例如被重载的操作符,如输入或输出操作符,经常需要访问类的私有数据成员。 友元(frend)机制允许一个类将对其非公有成员的访问权授予指定的函数或者类,友元的声明以friend开始,它只能出现在类定义的内部,友元声明可以出现在类中的任何地方...转载 2019-03-28 16:33:08 · 317 阅读 · 0 评论 -
友元类的应用
要求人物基类:class Lovers子类:Boyfriend,Girlfriend第三者:class Others子类:(无)故事是这样的基类Lovers的name属性访问级别为protected,但将Others类设为友缘关系。第三者Others类到自己拥有kiss方法,希望调用。此kiss方法传参为Boyfriend类型的的对象。代码#include<...转载 2019-03-28 16:35:53 · 357 阅读 · 0 评论 -
nodejs调用C++扩展模块培训
nodejs相关知识介绍1、V8是什么?为什么要用V8?V8实现了什么功能? 编程语言分为编译型语言和解释型语言两类,编译型语言在执行之前要先进行完全编译,而解释型语言一边编译一边执行,很明显解释型语言的执行速度是慢于编译型语言。 随着Web相关技术的发展,JavaScript所要承担的工作也越来越多,这就更需要快速的解析和执行JavaScript脚本。...原创 2019-04-19 11:48:09 · 1859 阅读 · 1 评论 -
C++中explicit关键字的使用
看书看到了explicit关键字,就来做个笔记,讲得比较明白,比较浅。在C++中,我们有时可以将构造函数用作自动类型转换函数。但这种自动特性并非总是合乎要求的,有时会导致意外的类型转换,因此,C++新增了关键字explicit,用于关闭这种自动特性。即被explicit关键字修饰的类构造函数,不能进行自动地隐式类型转换,只能显式地进行类型转换。注意:只有一个参数的构造函数,或者构造函...转载 2019-05-30 09:20:04 · 189 阅读 · 0 评论 -
[c++基础] 四种类型转换和隐式类型转换
static_cast<type-id >( expression ) 用于数值类型之间的转换,也可以用于指针之间的转换,编译时已经确定好,效率高,但须要自己保证其安全性。(1)用于数值之间的转化, 可以在相关指针在void* 之间转换(2)在基类和派生类之间进行转换(必须是有继承关系的两个类之间)上行转换:子类指针或引用转换成基类表示——安全下行转...转载 2019-05-30 09:51:12 · 458 阅读 · 0 评论 -
C++三大特性之多态(详细)
C++特性详解C++分为三大特性:_封装、_继承、_多态_封装:类是面向对象程序设计语言中的一个概念。类是对某个对象的定义。包含有关对象动作方式的信息,包括它的名称、方法、属性和事件。封装的类有如下的访问类型:1)公有( public )成员可以在类外访问;2)私有( private )成员只能被该类的成员函数访问;3)保护( protected )成员只能...转载 2019-07-03 09:10:41 · 454 阅读 · 0 评论 -
C++中让人忽视的左值和右值
前言为了了解C++11的新特性右值引用,不得不重新认识一下左右值。学习之初,最快的理解,莫过于望文生义了,右值那就是赋值号右边的值,左值就是赋值号左边的值。在中学的数学的学习中,我们理解的是,左值等价于等号左边的值,右值等价于等号右边的值;当我们继续学习C语言时,等号=不再叫等号,盖头换面叫做赋值号;那么来到C++我们还能这么理解吗?答案是部分否定的。假如你现在还是这样理解,那么请继续往下...原创 2019-07-31 19:14:09 · 146 阅读 · 0 评论 -
线程 局部存储
https://blog.csdn.net/cywosp/article/details/26469435https://blog.csdn.net/zzy1448331580/article/details/83051858原创 2019-09-23 14:32:29 · 99 阅读 · 0 评论 -
C++ protected(受保护的)详解
保护成员的可访问范围比私有成员大,比公有成员小。能访问私有成员的地方都能访问保护成员。保护成员扩大的访问范围表现在:基类的保护成员可以在派生类的成员函数中被访问。引入保护成员的理由是:基类的成员本来就是派生类的成员,因此对于那些出于隐藏的目的不宜设为公有,但又确实需要在派生类的成员函数中经常访问的基类成员,将它们设置为保护成员,既能起到隐藏的目的,又避免了派生类成员函数要访问它们时只能间接访问...转载 2019-03-28 16:18:13 · 1654 阅读 · 0 评论 -
linux和windows下,C/C++的sleep函数
简介: 函数名: sleep 功 能: 执行挂起一段时间 用 法: unsigned sleep(unsigned seconds); 在VC中使用带上头文件 #include <windows.h> 在gcc编译器中,使用的头文件因gcc版本的不同而不同linux系统需要添加的头文件 #include <...转载 2019-03-28 11:24:39 · 332 阅读 · 0 评论 -
C/C++基本数据类型所占字节数
参考:http://blog.csdn.net/vast_sea/article/details/8076934关于这个基本的问题,很早以前就很清楚了,C标准中并没有具体给出规定那个基本类型应该是多少字节数,而且这个也与机器、OS、编译器有关,比如同样是在32bits的操作系统系,VC++的编译器下int类型为占4个字节;而tuborC下则是2个字节。所以int,longint,s...转载 2019-03-28 11:14:24 · 385 阅读 · 0 评论 -
各种类型变量初始化
// 有些成员变量的数据类型比较特别,它们的初始化方式也和普通数据类型的成员变量有所不同。这些特殊的类型的成员变量包括: 1 2 3 4 5 // a. 常量型成员变量 如:const int i; // b. 引用型成员变量 如:int &i; // c. 静态成员变量...转载 2019-03-21 15:24:27 · 209 阅读 · 0 评论 -
字符串数组与字符串指针
字符串数组与字符串指针的区别 C中没有字符串数据类型,一般使用数组对字符串进行各种操作。(1)字符串指针 字符串指针是定义了一个指针变量,指针变量存储的是某个字符串的内存首地址。他是指针变量被放在内存中的栈区。在编译器编译时,会自动在字符串结尾处添加结束标识符'\0'。(2)字符串数组 字符串数组是用数组来存储字符串。字符串数组作为变量存储在内存中的栈区。C对于字符数组没...转载 2019-03-21 15:24:44 · 231 阅读 · 0 评论 -
数组指针和数组引用做参数的区别
template<class T>void func1(T &, T &){}template<class TT>void func2(TT, TT){}int main(){ int a[10], b[10], c[20]; func1(a, b); //OK, 数组引用 func1(b, c); //ERRO...转载 2019-03-20 17:41:15 · 614 阅读 · 0 评论 -
sizeof用法总结
sizeof用法总结 以下运行环境都是一般的,在32位编译环境中 1,基本数据类型的sizeof cout<<sizeof(char)<<endl;结果是1 cout<<sizeof(int)<<endl; 结果是4 c...转载 2019-03-20 17:40:16 · 182 阅读 · 0 评论 -
C++ 二级指针的使用
指针作为函数参数传递函数参数传递的只能是数值,所以当指针作为函数参数传递时,传递的是指针的值,而不是地址。#include "stdio.h"void pointer(int *p){ int a = 11; printf("\n\nEnter function"); printf("\nthe p is point to %p , addr is %X, *p i...转载 2019-03-20 17:34:57 · 403 阅读 · 0 评论 -
wstring操作与普通段字符操作对照表
字符分类: 宽字符函数普通C函数描述 iswalnum() isalnum() 测试字符是否为数字或字母 iswalpha() isalpha() 测试字符是否是字母 iswcntrl() iscntrl() 测试字符是否是控制符 iswdigit() isdigit() 测试字符是否为数字 iswgraph() isgraph...转载 2019-03-20 16:11:34 · 383 阅读 · 0 评论 -
C++的六个默认函数
C++有六个默认函数:分别是1、default构造函数;2、默认拷贝构造函数;3、默认析构函数;4、赋值运算符;5、取值运算符;6、取值运算符const;// 这两个类的效果相同class Person{}class Person{public: Person() {...} // deafault构造函数; Person(con...转载 2019-03-20 14:42:59 · 511 阅读 · 0 评论 -
C++类中的静态成员变量和静态成员函数的作用
数据成员可以分为静态变量、非静态变量两种。静态成员:静态类中的成员加入static 修饰符,即是静态成员,可以使用类名+静态成员名访问此静态成员,因为静态成员存在于内存,非静态成员需要实例化才会分配内存,所以静态成员不能访问非静态成员,因为静态成员存在于内存,所以非静态成员可以直接访问类中的静态成员。 非静态成员:所以没有加static的成员都是非静态成员,当类被实例化后,可以通过实例化的类...转载 2019-03-20 10:58:59 · 356 阅读 · 0 评论 -
C++构造函数初始化列表与构造函数中的赋值的区别
C++类中成员变量的初始化有两种方式:构造函数初始化列表和构造函数体内赋值。一、内部数据类型(char,int……指针等) class Animal { public: Animal(int weight,int height)://A初始化列表 m_weight(weight), m_height(height) { ...转载 2019-03-20 10:30:16 · 306 阅读 · 0 评论 -
stl map容器中指针的释放
struct MyStruct{int i;char c;MyStruct(int i, char c){this->i = i;this->c = c;}};int stl_ptr_test(){MyStruct* pst1 = new MyStruct(1, 'a');...转载 2019-03-20 10:14:49 · 1152 阅读 · 0 评论 -
char* char[]
C++判断char*的指向char *a = "Peter";char b[] = "Peter";char *c = new char[6];strcpy_s(c, 6, "Peter");这里a指向常量区b指向栈区c指向堆区//main.cppint a=0; //全局初始化区char *p1; //全局未初始化区main(){ in...转载 2019-03-21 15:24:14 · 7701 阅读 · 0 评论 -
C++Union的用法
联合(union)在C/C++里面见得并不多,但是在一些对内存要求特别严格的地方,联合又是频繁出现,那么究竟什么是联合、怎么去用、有什么需要注意的地方呢?就这些问题,我试着做一些简单的回答,里面肯定还有不当的地方,欢迎指出!1、什么是联合?“联合”是一种特殊的类,也是一种构造类型的数据结构。在一个“联合”内可以定义多种不同的数据类型, 一个被说明为该“联合”类型的变量中,允许装入该“联合”所...转载 2019-03-21 15:23:34 · 234 阅读 · 0 评论 -
数字 与 字符串 相互转换
整型值 >>>> 字符串sprintf (跨平台)char buffer[20]int n = 123456;sprintf(buffer,"%d",n);itoa()函数itoa()原型: char *itoa( int value, char *string,int radix);原型说明:输入参数:v...转载 2019-03-28 09:25:28 · 151 阅读 · 0 评论 -
慎用sscanf、swscanf
常見錯誤用法:bytearg;swscanf(_T("100"),_T("%d"), &arg);INT8arg;swscanf(_T("100"),_T("%d"), &arg);INT16arg;swscanf(_T("100"),_T("%d"), &arg);以上三種用法會出現內存越界,從而可能導致程序崩潰,請看下面一段測試代碼:by...转载 2019-03-27 20:48:15 · 306 阅读 · 0 评论 -
C 字符数组与字符串的使用及加结束符'\0'的问题
1、字符数组的定义与初始化字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素。char str[10]={ 'I',' ','a','m',' ',‘h','a','p','p','y'};即把10个字符分别赋给str[0]到str[9]10个元素如果花括号中提供的字符个数大于数组长度,则按语法错误处理;若小于数组长度,则只将这些字符数组中前面那些元素,其余的元素自动定为空字符...转载 2019-03-27 20:31:06 · 614 阅读 · 0 评论