
C++
狱典司
异步但IO!
展开
-
C++内联函数(inline)和宏函数(define)对比
1.C中使用define这种形式宏定义的原因是因为C语言是一个效率很高的语言,这种宏定义在形式及使用上像一个函数,但它使用预处理器实现,没有了参数压栈,代码生成等一系列的操作。因此,效率很高,这是它在C中被使用的一个主要原因。2.这种宏定义在形式上类似于一个函数,但在使用它时,仅仅只是做预处理器符号表中的简单替换,因此它不能进行参数有效性的检测,也就不能享受C++编译器严格类型检查的好处,另外它的返回值也不能被强制转换为可转换的合适的类型。这样,它的使用就存在着一系列的隐患和局限性。3.在C++中引原创 2023-01-07 11:09:14 · 1011 阅读 · 0 评论 -
static关键字分别在C和C++中的作用
一般在函数中定义的变量,在栈区分配空间,函数退出时胡自动释放,无法保存,而如果定义全局变量来实现,变量就不属于函数本身,不在仅受函数控制,给程序维护带来不便;仅对当前文件可见,其他文件不可访问,其他文件可以定义与其同名的变量,两者互不影响。在定义不需要与其他文件共享的全局变量时,加上static关键字能够有效地降低程序模块之间的耦合,避免不同文件同名变量的冲突,且不会误使用。只能在声明它的文件可见,其他文件不能引用该函数。定义在函数体外部,在静态区分配存储空间,编译器自动对其初始化。原创 2023-01-07 11:06:49 · 308 阅读 · 0 评论 -
C++虚函数表的底层原理 & 到底有几张虚函数表? & 虚函数表是怎么维护的?
昨天读了陈皓前辈博客中关于虚函数表底层原理的一篇博客,本着实践出真知的出发点,遂写了相应的测试代码去检验,发现最后测试出来的结果和陈皓博客中说明的情况存在出入。目前尚不清楚是不同编译器底层实现原理不同还是整个标准已经迭代(距离那篇博客的发布时间已经过去15年了),欢迎一样有求知欲的伙伴同僚也把代码拿去测试,一起分享心得!原创 2022-08-19 17:31:23 · 701 阅读 · 2 评论 -
二级指针分析 -- (int *)*(&b)
可以看出来,类似(int )(&b)这样的操作,主要是通过二级指针访问一级指针存储内容 ,上示代码中关于ptr和ptr2的相关操作解释:1. (int *)(ptr2)是指二级指针中存放的一级指针的地址;2. * 是取出 一级指针的地址 上的值,也就是一级指针本身存储的值;3.(int *)是将从一级指针取到内容指针化,因为是一级指针存储的还是一块地址,否则直接按cout输出会输出整型 。.........原创 2022-08-19 01:14:16 · 302 阅读 · 0 评论 -
校招C++笔试ACM模式输入处理
以整型的一维和二维数组为例,构建输入原创 2022-08-18 21:32:43 · 536 阅读 · 0 评论 -
C++泛型编程&模板学习笔记
该篇笔记主要总结了黑马程序员C++课程中讲解的模板部分。原创 2022-07-29 22:20:07 · 148 阅读 · 0 评论 -
C++中的各种“虚“-- 虚函数、纯虚函数、虚继承、虚基类、虚析构、纯虚析构、抽象类讲解
C++中的一些重要概念都与“虚”相关,比如:① 虚基类、虚继承、虚基类指针(vbptr)、虚基类表(vbtable);② 虚函数、纯虚函数、虚函数指针(vfptr)、虚函数表(vftable)、抽象类、虚析构、纯虚析构。这里对上面罗列出的概念做一个总结,争取把这些都一次讲清楚:......原创 2022-07-29 16:29:17 · 1538 阅读 · 2 评论 -
C/C++ 32位浮点型float转16进制并用字符串输出,简洁明了
C/C++ 32位浮点型float转16进制并用字符串输出C 语言中,指针地址就是IEEE 754 16进制编码,C可以直接调用就不用写函数计算了,C++也是一样的。联合体共用一段内存,可以用一个包含float和char[4]的联合体,给float赋值,然后打印4个char就行;提供一个在线转换工具:在线进制转换(支持在2~36进制之间进行任意转换)代码32位浮点型float(字符串形式)转16进制并用字符串输出#include <stdio.h>#include <s原创 2022-04-06 18:14:20 · 7933 阅读 · 0 评论 -
C语言用read封装/实现一个readline函数,读取文件一行 or 最后一行
#include <stdlib.h>#include <stdio.h>#include <unistd.h>#include <sys/types.h>#include <string.h>#include <fcntl.h>/* 读取fd的一行内容 */ssize_t readline(int fd, char *buf, ssize_t maxlen){ ssize_t count = 0; memset(原创 2022-04-05 22:19:29 · 3752 阅读 · 0 评论 -
C++实现string输出char的二进制 && string按二进制位转char类型
C++实现string输出char的二进制 && 二进制string按位转char类型string按二进制位转char类型string输出char的二进制string按二进制位转char类型示例代码:#include <string>#include <iostream>using namespace std; /* 8 Bytes 以0/1为内容的字符串按二进制转化成 1 Byte 的 char */int bin_to_dec_once(stri原创 2022-03-31 23:55:10 · 2275 阅读 · 0 评论 -
double类型打印结果一致但系统判定不一致的问题
假设存在两个理论结果一致的公式b和b1:b和b1的计算方式理论上计算得出的结果是一样的,编译器打印出来肉眼看也是一样的,系统判定不一样原因如下:即使double有着很高的精度(64位),但是机器对最后一位的处理必定是四舍五入的;如遇到无限循环or无限不循环小数这样的计算结果,若将该结果保存在某个double变量中用于后续计算,计算结果的判断可能会出错。那么有以下几种处理方式:(1)将double强制转换为string,保留精度在十进制0.000001(2)检测差值,当差值小于0.00000原创 2022-03-05 14:10:43 · 1014 阅读 · 0 评论 -
C语言再学习笔记 Part.1
文章目录1. C语言中的NULL到底是什么?又不是什么?2. 关于Malloc,真的理解了吗?2.1 关于malloc(strlen(str)+1)问题到底free啥?2.2 关于怎么理解'\0'的问题2.3alloc和realloc3. C语言中怎么通过函数修改实参的值?方法一:用返回值的办法方法二:用指针(地址传递)的办法4. gets和fgets的区别?puts和fputs呢?4.1 gets和fgets4.2 puts和fputs5. Makeargv为例子解析一下对比find_char()6. C原创 2021-12-10 13:13:10 · 1648 阅读 · 1 评论 -
C++ 如何将整形数据按原内容转化成字符串
//直接封装成一个函数吧更方便直接copy代码//注意需要头文件: #include <sstream>string intToStr(int intAns){ stringstream s; s << intAns; string p = s.str(); const char* res = p.c_str(); return res; // 其实返回值就是一个字符串}代码演示如下:int i = 10086;string str = intToStr原创 2021-09-23 22:40:00 · 242 阅读 · 1 评论 -
C++实现按指定子串分割母串(split)函数 按空格分割string字符串
C++没有自带的split函数,需要我们自己写一个vector<string> split(const string& str, const string& delim) { vector<string> res; if("" == str) return res; //先将要切割的字符串从string类型转换为char*类型 char * strs = new char[str.length() + 1] ; //不要忘了 strcp原创 2021-09-23 22:31:59 · 484 阅读 · 0 评论 -
C++如何递归地算出一个文件夹的大小(不论文件夹有多少层)
先看一眼文件结构(即本例的测试路径)#include <iostream>#include <string>#include <vector>#include<fstream> #include <io.h>using namespace std;string path("C:\\Users\\SeanWayen\\Desktop\\test"); //自己选择目录测试//获取文件大小的函数,返回值以KB为单位doubl原创 2021-06-09 18:21:20 · 1081 阅读 · 2 评论