- 博客(10)
- 收藏
- 关注
原创 关于常引用可以引用不同类型数据的思考
本文记录一个小问题,可能需要你懂一点c++和汇编 同学们学c++的过程中学到一定深度会遇到以下语法疑问 int a; long &ref=a; (×) 但是我们使用常引用的话却可以编译通过: int a; const long&ref=a; (✓) 我们通过汇编探究一下: 我们可以看到[ebp-0Ch]表示age,[ebp-18h]表示rAge,但我们发现第20行lea的地址却是ebp-24h,而不是age的地址,说明类型转换时会产生一个临时的匿名变量,而常引用引用的是这个临
2022-09-22 22:07:45
297
1
原创 关于printf的缓冲
在 printf 的实现中,在调用 write 之前先写入 IO 缓冲区,这是一个用户空间的缓冲。系统调用是软中断,频繁调用,需要频繁陷入内核态,这样的效率不是很高,而 printf 实际是向用户空间的 IO 缓冲写,在满足条件的情况下才会调用 write 系统调用,减少 IO 次数,提高效率。 printf(…) 在 glibc 中默认为行缓冲,遇到以下几种情况会刷新缓冲区,输出内容: (1)缓冲区填满; (2)写入的字符中有换行符\n或回车符\r;(3)调用 fflush(…) 手动刷新缓冲区; (4)
2022-09-21 12:35:34
542
原创 浅谈右值引用
左值引用 先看一下传统的左值引用。 int a = 10; int &b = a; 定义一个左值引用变量b = 20; 通过左值引用修改引用内存的值左值引用在汇编层面其实和普通的指针是一样的;定义引用变量必须初始化,因为引用其实就是一个别名,需要告诉编译器定义的是谁的引用。 int &var = 10; 上述代码是无法编译通过的,因为10无法进行取地址操作,无法对一个立即数取地址,因为立即数并没有在内存中存储,而是存储在寄存器中,可以通过下述方法解决: const int &var
2022-04-04 09:55:12
319
原创 shell中的特殊符号
shell中的特殊符号 符号 含义 ~ 家目录 cd~表示进入用户家目录 ! 执行历史命令 !!表示直接执行上一条命令 $ 表示取出变量的内容 & 后台执行 * 星号是shell中的通配符 匹配所有 ? 问号是shell中的通配符 匹配除回车以外的一个字符 ; 分号可以在shell中一行执行多个命令,命令之间用分号分割 | 管道符 上一个命令的输出作为下一个命令的输入 cat filename | grep “abc” \ 转义字符
2021-07-28 11:57:16
717
原创 gdb调试器(转)
gdb调试器 一、相关信息了解 1、程序的发布有两种模式:" debug " 和 " release " 2、Linux下gcc / g++ 产生的可执行程序默认是 " release " 模式 3、使用gdb进行调试时,必须在生成可执行程序的时候加上 -g 选项 为啥? 以便生成gdb调试所需要的调试符号的信息,如果不加该选项,调试时相关调试操作是不能狗进行使用的 二、gdb的基本操作 < l / list > 后接数字,显示前后各5行的代码,接着上次的位置往下列,每
2021-04-23 20:17:49
124
原创 指针传递和引用传递
指针传递和引用传递 为了更好的理解指针和引用,下面介绍一下指针传递和引用传递。当指针和引用作为函数的参数是如何传值的呢?指针传递参数本质上是值传递的方式,它所传递的是一个地址值。值传递过程中,被调函数的形式参数作为被调函数的局部变量处理,即在栈中开辟了内存空间以存放由主调函数放进来的实参的值,从而成为了实参的一个副本。值传递的特点是被调函数对形式参数的任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值。 引用传递过程中,被调函数的形式参数也作为局部变量在栈中开辟了内存空间,但是这时存放的是由主调
2021-04-21 18:06:09
2787
1
原创 详细讲解命名空间(转)
详细讲解命名空间(转) C++ using namespace std 详解 所谓namespace,是指标识符的各种可见范围。C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。 一 : 和<iostream.h>是不一样,前者没有后缀,实际上,在你的编译器include文件夹里面可以看到,二者是两个文件,打开文件就会发现,里面的代码是不一样的。 后缀为.h的头文件c++标准已经明确提出不支持了,早些的实现将标准库功能定义在全局空间里,声明在带.h后缀的头文件里,c
2021-04-21 12:35:57
622
2
原创 栈的操作
栈的操作 栈的初始化 元素入栈 元素出栈 获取栈顶元素 获取栈的大小 判读栈空 栈的销毁 #include<stdio.h> #include<stdlib.h> #include<assert.h> typedef int STDataType; typedef struct Stack { STDataType* _a; int _top;//栈顶 int _capacity;//容量 }Stack; void StackInit(Stack *ps) {
2021-01-19 16:28:50
108
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人