![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
_wauwa
这个作者很懒,什么都没留下…
展开
-
C语言中的移位运算
操作数 x 位表达式为 00110101, x >> 3(算术右移) 将得到 111001110。操作数 x 位表达式为 00110101, x >> 3(算术右移) 将得到 00000110。例如:操作数 x 位表达式为 00110101, x >> 3(逻辑右移) 将得到 00000110。也就是说将x右边的w-k位向左移动k位,丢弃最高的k位,并在右端补k个0.而算术右移是在左端补k个操作数 x 最高有效位的值,得到的结果是。的操作数 x,x原创 2022-10-23 20:39:14 · 5595 阅读 · 1 评论 -
声明、定义、初始化的区别
对于变量,编译器确定变量的大小,然后为其开辟空间保存数据,对于函数,编译器会生成代码,代码也会占用一定的内存。声明行为是不分配存储空间的,其目的通常是提前使用,即在定义之前使用,或在一个文件中使用另一个文件定义的变量。初始化对于一个程序来说就是加载基本的数据,在变量定义之后,系统为变量分配的空间内存储的指是不确定的,所以需要对这个空间进行初始化,以确保程序的安全性和确定性。// 定义行为,分配了四字节的内存空间,同时包含声明。// 其中变量a是在别的文件中定义的。原创 2022-10-23 14:45:35 · 245 阅读 · 0 评论 -
static静态局部变量初始化问题
static静态局部变量初始化问题转载 2022-10-16 16:56:26 · 1048 阅读 · 2 评论 -
c++ 实现智能指针shared_ptr
sharedPtr.h#ifndef _sharedPtr_H__#define _sharedPtr_H__class sharedPtr {public: sharedPtr(); sharedPtr(int*); sharedPtr(const sharedPtr&); sharedPtr(sharedPtr&&); sharedPtr& operator=(const sharedPtr&); sharedPtr& ope原创 2022-05-23 23:25:20 · 165 阅读 · 1 评论 -
C++11 智能指针
此篇均参考C++ Primer第五版为了更容易更安全的使用动态内存,C++11提供了两种智能指针,来管理动态对象。智能指针行为类似于常规指针,重要的区别在于它负责自动释放所指向的对象。shared_ptr允许多个指针指向同一个对象;unique_ptr则“独占“所指向的对象。weak_ptr是一种若引用,指向shared_ptr所管理的对象。这三种类型都定义在memory头文件中。一、shared_ptr类智能指针也是模板,当我们创建一个智能指针时,必须提供额外的信息--指针可以指向的类..原创 2021-11-19 21:36:45 · 4590 阅读 · 0 评论 -
C++ 内存管理
一、c/c++内存分布内存布局(展现了各个区的位置关系)Code Segment(代码区)代码段存放可执行指令和只读常量,在内存中,为了保证不会因为堆栈溢出被覆盖,将其放在了堆栈段下面(从上图可以看出)。通常来讲代码段是共享的,这样多次反复执行的指令只需要在内存中驻留一个副本即可。代码段一般是只读的,程序执行时不能随意更改指令,也是为了隔离保护。Data Segment (数据区)数据段存放已初始化的全局变量和静态变量。数据段是可以修改的,不然程序运行时变量无法修改了。.转载 2021-11-19 15:11:00 · 134 阅读 · 0 评论 -
C++:string
string支持的成员函数pop_back()push_back()front()back()原创 2021-10-27 16:10:23 · 59 阅读 · 0 评论 -
C++ 常用库函数
目录reverse()reverse()逆序(反转)无论是在C或是C++中用的都特别多,常用于数组,字符串,容器等,其本身的函数参数也不复杂。 标准C中是没有recerse()函数的,这是C++的一个新增函数,使用需要包含头文件#include <algorithm> reverse函数用于反转在[first,last)范围内的顺序(包括first指向的元素,不包括last指向的元素),reverse函数没有返回值,参数是双向迭代器te...原创 2021-10-19 22:14:50 · 449 阅读 · 0 评论 -
C++ Map相同key是否覆盖问题分析
1 问题描述C++的标准库关联容器map是不允许有key相同的键值对存在的。那么当key已经存在的情况下,我们再次插入相同的key,那么key的value会被覆盖吗?2 编码测试测试代码#include <map>#include <string>#include <iostream>using std::map;using std::string;using std::cout;using std::endl;using std::mak转载 2021-10-17 22:10:41 · 2580 阅读 · 0 评论 -
C++ 对象移动(右值引用(&&)、移动构造函数、移动赋值运算符、引用限定函数)
https://blog.csdn.net/baidu_41388533/article/details/106468153转载 2021-05-10 20:40:57 · 85 阅读 · 0 评论 -
C++:理解this指针
详情见-->https://blog.csdn.net/keneyr/article/details/111758870转载 2021-04-15 14:40:03 · 48 阅读 · 0 评论 -
C++:constexpr及constexpr函数
constexpr变量constexpr表达式是指值不会改变并且在编译过程就能得到计算结果的表达式。声明为constexpr的变量一定是一个const变量,而且必须用常量表达式初始化:constexpr int mf = 20; //20是常量表达式constexpr int limit = mf + 1; // mf + 1是常量表达式constexpr int sz = size(); //只有当size是一个constexpr函数时才是一条正确的声明语句指针和constexpr必.转载 2021-04-14 17:03:04 · 1148 阅读 · 2 评论 -
C++:四种显示类型转换 static_cast/const_cast/reinterpret_cast/dynamic_cast
更新中.....建议:避免强制类型转换 尤其是reinterpret_cast显示转换:命名的强制类型转换:一个命名的强制类型转换具有以下形式:cast-name<type>(expression)其中type是转换的目标类型,expression是要转换的值,如果type是引用类型,则结果是左值,cast-name是static_cast,dynamic_cast,const_cast和reinterpret_cast中的一种。其中dynamic_cast支持运行时类型识别。c原创 2021-04-12 09:59:10 · 99 阅读 · 0 评论 -
C++:标准库类型vector
持续更新...vector是一个类模板,vector是模板而非类型。vector对象初始化vector<T> v1; //v1是一个空vector,它的的潜在元素是T类型的,执行默认初始化vector<T> v2(v1); //v2中包含有v1所以元素的副本vector<T> v3(n,val); //v3包含了n个重复的元素,每个元素的值都是valvector<T> v4{a,b,c...};//v4包含了原创 2021-04-10 16:00:28 · 77 阅读 · 0 评论 -
C++:标准库类型string
标准库类型string表示可变长的字符序列,字符串字面值与string是不同的类型。初始化string对象初始化方式string s1;string s2("value"); //直接初始化string s3 = "value"; //拷贝初始化string s4(n,'c'); //把s4初始化为由连续n个字符c组成的串string的操作s.empty(); //s为空返回true,否则返回falses.size(); //返回s中字符的个数...原创 2021-04-10 14:48:21 · 52 阅读 · 0 评论 -
C++:auto&decltype
auto用法总述:C++11 auto可以在声明变量的时候根据变量初始值的类型自动为此变量选择匹配的类型,类似的关键字还有decltype。举个例子:auto的作用就是为了简化变量初始化,如果这个变量有一个很长很长的初始化类型,就可以用auto代替。 int a = 10; auto au_a = a;//自动类型推断,au_a为int类型 cout << typeid(au_a).name() << endl;typeid运算符可以输出变...原创 2021-04-10 11:29:43 · 115 阅读 · 0 评论 -
C++:const限定符
const限定符const对象一旦创建后其值就不能再改变,所以const对象必须初始化。const int i=get_size(); //正确:运行时初始化const int j=42; //正确:编译时初始化const int k; //错误:未初始化const对象的常量特征仅仅在执行改变其值的操作时才会发挥作用。int i=42;const int ci=i; //正确int j=ci; //正确ci=20;原创 2021-04-09 23:20:59 · 70 阅读 · 0 评论 -
C++:指针&引用
引用引用即别名,并非对象,它只是为一个已经存在的对象所起的另一个名字。 定义引用时,程序把引用和它的初始值绑定在一起,而不是将初始值拷贝给引用,一旦初始化完成,应用将和它的初始值一直绑定在一起,无法重新绑定另一个对象。 引用只能绑定在对象上,而不能与某个字面值或者表达式绑定在一起。 定义了一个引用之后,对其所作的所有操作都是在与之绑定的对象上进行的。int val=1024;int &refval=val; //refval指向val(是val的另一个名字)int &ref原创 2021-04-09 10:39:08 · 412 阅读 · 0 评论 -
C++ inline用法
1、引入 inline 关键字的原因在 c/c++ 中,为了解决一些频繁调用的小函数大量消耗栈空间(栈内存)的问题,特别的引入了inline修饰符,表示为内联函数。栈空间就是指放置程序的局部数据(也就是函数内数据)的内存空间。在系统下,栈空间是有限的,假如频繁大量的使用就会造成因栈空间不足而导致程序出错的问题,如,函数的死循环递归调用的最终结果就是导致栈内存空间枯竭。下面我们来看一个例子: inline const char *num_check(int v){ retu..转载 2021-04-02 15:34:44 · 70 阅读 · 0 评论 -
return、break、continue的区别
1.return 语句的作用 (1) return 从当前的方法中退出,返回到该调用的方法的语句处,继续执行。 (2) return 返回一个值给调用该方法的语句,返回值的数据类型必须与方法的声明中的返回值的类型一致。 (3) return后面也可以不带参数,不带参数就是返回空,其实主要目的就是用于想中断函数执行,返回调用函数处。 2.break语句的作用 (1)break在循环体内,强行结束循环的执行,也就是结束整个循环过程,不在判断执行循环的条件...转载 2021-03-29 15:02:14 · 165 阅读 · 0 评论 -
反向迭代器
转载:https://blog.csdn.net/kjing/article/details/6936325转载 2021-03-28 20:13:30 · 80 阅读 · 0 评论 -
C++:vector容器相关知识点
insert():1、在指定位置loc前插入值为val的元素,返回指向这个元素的迭代器2、在指定位置loc前插入num个值为val的元素3、在指定位置loc前插入[start,end)的所有元素begin()和end()成员:begin和end操作产生指向容器内第一个元素和最后一个元素的下一个位置的迭代器。这两个迭代器通常用于标记包含容器中所有元素的迭代范围。1、c.begin() 返回一个迭代器,它指向容器c的第一个元素2、c.end() 返回一个迭代器,它指向容器c的最后一个原创 2021-03-25 14:51:00 · 116 阅读 · 0 评论