- 博客(29)
- 资源 (1)
- 收藏
- 关注
原创 【C++】在windows下配置一个小巧实用的C/C++调试环境
虽然在大部分常用的C/C++编辑器中,调试功能已经很方便且完善,但是,如果你还需要一个小巧一点,调试信息还完善的调试环境的,可以试试在cygwin中安装cgdb+gdb-dashboard的这种配置。
2024-11-15 11:38:04
990
原创 【C++】用lambda表达式,让代码写的更帅一点
从C++11开始,C++就加入了lambda 表达式,如果写过js就会了解,lambda表达式实际上就差不多是js的匿名函数的意思,在C++中定义个lambda表达式,一般格式如下。可以看到,f就像平常定义的一个函数一样被调用,这就是基本的lambda表达式, 它是个函数当然也可以定义在任何地方,不光是函数内可以定义,定义在函数外也可以。可以看到,=所捕获的成员变量是可以修改的,但如果是捕获了局部变量,则还和在函数中的使用一样,只能用,不能改。a,b作为值捕获,是不能修改的,如果要修改,必须捕获是[&]。
2024-11-15 11:37:22
895
原创 【C++】使用自定义字面量,少写几句代码
上例使用起来就比较简单,但是,标准库提供的可能也无法满足我们所有需求,还是要自己去定义字面量类似s那些的字面量定义,自己实现上并不复杂,举个简单例子,定义一个和s相同功能的字面量,叫_MSint main()return 1;没报错,能编译,运行结果正常其实,一看operator就明白了,他就是个重载运算符的操作.只不过重载定义字面量是有一定格式和要求的。
2024-01-18 09:31:19
895
原创 【C++】虚函数、虚基类、纯虚函数、抽象类到底怎么回事
从运行中可以发现,父类ccc中调用了abc,这个abc并非base中的abc,而是myclass中的abc,也就是说,子类的abc覆盖了父类的abc,应为base中的abc被定义为虚函数,便被子类的abc覆盖了。可以看到base的构造函数被调用了两次,这个结果,可能是需要的,但大多数情况下可能你不需要,如果不需要,这个时候,就需要用虚基类来解决这个问题。一个简单的场景,假设有两个类,继承了同样一个基类,调用基类的abc,但按照业务需求,abc需要实现不同逻辑,这时,虚函数就有用了,举例如下。
2024-01-18 09:30:50
1888
原创 【C++】变参函数va_start,va_arg,va_end介绍及实现方式
如果写过JS的话,就知道在JS中定义一个函数,就算输入的实参和形参不一致,也可以同过arguments获取参数上例输出1123在C/C++中其实也可以通过一些方式,获取实参中没有定义的多余参数,被称作变参函数。
2023-10-26 17:49:37
1476
原创 【C++】C++中那些有点意思,但一般也用不到的替代运算符
事实上这些符号,我们也可以通过宏定义来做到,比如想把括号替换KuoHaoL ,KuoHaoR。以上的运算符都是在C++中语法定义的,实际上在C中就使用宏定义方式,实现了一些。所谓替代运算符无非就是用其他字符或者符号代表一些预定义的运算符和符号。就是这样,花括号可以替换成了为,无非就是换了一个表示方法。要注意的是,在c++17以后,下面几个替换运算符,已经不能使用了。在C++到20可以使用的代用符如下。如果用替代用算符表示的话。
2023-10-20 14:02:58
558
原创 【C++】用constexpr,constinit,consteval让程序跑的快一点
从几个例子其实也可一看出来,这三个关键字的作用,都是为了让可以确定的运算结果,在编译时就首页被执行完毕,这样,运行时等于只是操作一个具体的常量,不会在执行多余的运算,也就提高了一点运行速度。也就是说,被这三个关键字修饰的变量或者函数,即使不使用编译器、程序不运行,也能准确的知道他最终的值.这时候才能使用上述三个关键字功能。
2023-10-18 17:00:34
564
原创 【C++】即时编译jit和xbyak的基本使用介绍
一般来说,解释型编程语言都是依靠自身运行的虚拟机,在解释程序。有时候语言为了提高运行速度,不会去直接解释程序文本,而是模拟cpu执行方式,将文本代码执行一次翻译,翻译为类似cpu执行的汇编语言去执行。有些语言会模拟出几个CPU的寄存器,有些则使用栈的方式模拟寄存器。无论采用什么方式,基本都是循环读取文件的内容,按照一定规则去解释。这也就导致了,运行速度会慢一点,因为cpu最终执行的是虚拟机,而不是编写的语言。
2023-10-12 11:22:55
1333
原创 【C++】一个极简单且强大的JSON操作库
今天再介绍一个用于C++操作JSON的库,以前也介绍过相关库,不过使用上稍微的复杂一点,如果常写JS的话,就知道js操作JSON相当的方便其实C++也有一个操作JSON非常方便强大库这个库的使用基本不比JS操作JSON复杂多少,最大的亮点就是不需要依赖,只有一个单文件,文件只有800多K,
2023-06-02 15:12:37
2178
原创 【C++】虽然有用,但也不常用的decltype
从C++11开始,语法里多了一个类型运算符decltype,它可以返回表达式的类型。在C++里有个typeid运算符,也能返回类型,但是decltype和typeid使用上并不太一样,typeid事实上是返回了type_info类型的一个说明,例如以上代码输出struct A但是decltype是直接返回了测试表达式的类型,例如以上代码输出int2。
2022-09-28 09:47:56
784
原创 【C++】不用include,使用C++模块语法实现函数调用
写C++的时候,我们要调用其他文件中的函数或者类这些,一般情况下,就是include一个头文件,或者extern。但在C++20中,有了一个更好的调用方式:使用模块化方式进行调用。如果使用过javascrtip的话,对这种语法看上去就比较熟悉,在javascript中然后就可以在b.js中使用val了C++使用模块,也差不多,可能比在JS中使用还要简便一点,举例如下。
2022-08-21 17:21:13
1752
原创 【C++】setjmp,longjmp的详细使用说明
我们在写C、C++语言的时候,代码在不同逻辑间的跳转是肯定的,一般情况最常用的就是if,switch这些,但是,有些时候,逻辑变得复杂的时候,比如嵌套多层循环,在最内层循环得到结果后,事实上,上面的循环就不重要了,就需要跳出整个循环体,去执行其他业务逻辑,这个时候,如果使用goto语句,去实现就方便很多,比如下例子虽然这么写方便了很多,但是goto语句的使用,尤其是如果大量大使用,会给程序的可读性和流程控制带来很大的负担,使程序难以理解和维护。所以大部分时候,是不建议使用的。...
2022-08-16 16:32:21
2121
原创 【C语言】如何正确使用sizeof
sizeof用过吧?你肯定用过,至少你刚开始学C或者C++的时候,学到类型这一节,你一定会写如下代码测试每个类型的长度。 printf("%d", sizeof(int)); printf("%d", sizeof(char)); printf("%d", sizeof(short)); printf("%d", sizeof(long)); printf("%d", sizeof(float)); printf("%d", sizeof(double));对,这就是sizeof
2022-04-18 15:22:36
11107
原创 【C语言】static关键字的使用
static关键字大家肯定都不陌生,只要你写过c++,java,c#,或者是js,通常情况下,你肯定要使用到static关键字一般情况下,我们使用它都是用在类中的函数上,或者是函数内的变量,或者类的全局变量,在面向对象的语言当中,使用static无非就为了以下几点内部变量保存、方法的静态调用、变量的静态调用比如我们写C++的时候这个一看一目了然,静态调用abc类中方法aaa、变量c的时候,都是直接用类名调用,并没有声明对象变量tt的使用方式,是static最常用的方法,保存变量上述代码输出。
2022-04-12 10:53:56
1808
原创 C/C++不用free你会释放内存吗?
写C的时候,要申请一段内存,大部分情况,是不是一般都用malloc,比如int *p = (int*)malloc(100);大家都知道,这是分配100个int大小的内存地址,用完以后呢?释放,一定要释放,如果不释放,这段内存会一直保存,如果你的malloc写在循环内,多大的内存最终都能耗尽现在做个测试环境:vs2015,win10写个例子int main(){ int *p = (int*)malloc(100); _CrtDumpMemoryLeaks(); return
2022-04-02 13:05:29
1599
原创 用Cmake-js编译C++写的Nodejs扩展
你是不是写nodejs应用的时候,有过属于自己的业务需求,但这个需求你又找不到合适的类库,或者你这个业务需求独一无,根本不可能找到已经写好的类库比如,你要调用一个自己写的DLL里的函数这时候,你就需要用C++写个nodejs扩展了,但是c++又需要编译,这就需要个编译工具了标题Nodejs扩展基本开发按照Nodejs官方文档,编译扩展,两种方式node-gypcmake-js现在,分别简单介绍一下以上两种编译方式1.node-gyp:这个gyp应该都比较熟悉,他是google的一个跨平
2022-03-30 20:01:04
5795
原创 你的C++为什么‘烫‘了,又为什么‘屯‘了?
你是不是有过这样的经历?写C/C++的时候,出现这种奇怪的字符串,比如出现如下字符然后还出现这种字符串你回头一看,最终发现了问题,肯定是下面这两种问题。出现’烫’的时候,是你声明了一个char数组,但是没有赋值任何数据char a[2];出现’屯’,是你声明了char指针,也没有给它任何数据char * a = new char[2];并且,你还是用的编辑器是vs,还是debug模式,我说的对不对?问题出现了,也知道怎么出现的,应该想想为什么出现’烫’,而没有出现’汤’,为什么出现
2022-03-24 21:45:08
4964
原创 C++真的能兼容C吗?
今天看到了网上说C是C++的子集,C++可以兼容C,这是真的吗?要弄明白这个问题,首先,先简单介绍一下这两个语言C:C语言是一门面向过程的、抽象化的通用程序设计语言。C语言诞生于美国的贝尔实验室,C语言之所以命名为C,是因为他的前身是B语言,经过多年发展,最终在1972年,正式推出。C++:C++是一种高级程序设计语言,1979年,本贾尼·斯特劳斯特卢普,对C进行了改良工作,改良后,该语言被正式命名为C++。以据以上介绍,C++确实是从C改进而来,但是,它真的能和C兼容吗?也就是网上说的
2022-03-20 20:47:44
13996
原创 一个简单的C++操作Excel的方案
因为工作的关系,我需要时常操作一下excel的数据,按照一定的格式加工原文件中的数据后,搞到另一个excel中然后搜索了不少excel操作的开源类库,但搜到的代码要么就是需要第三方库配合,要么就是功能过于强大,导致使用成本较高最终,找到一篇2006年的文章BasicExcel - A Class to Read and Write to Microsoft ExcelBasicExcel,一个读写Excel的类一.基本介绍BasicExcel 是一个非常简单的操作Excel的库.
2022-03-18 21:29:22
25224
8
原创 30 个有用的正则表达式代码片段
正则表达式是一个强大的工具,这应该在每个开发人员的工具带中。它们可以根据非常复杂的参数匹配一串字符,这可以在构建动态网站时为您节省大量时间。开发人员面对不同的代码,但许多代码保持相同,正则表达式有个陡峭的初始学习曲线,但当你正确使用的时候,他是非常有用的最棘手的部分是学习语法并学习如何从头开始编写自己的正则表达式代码。为了节省时间,我组织了 30 个不同的正则表达式代码片段,您可以将它们合并到开发项目中。而且由于正则表达式不限于单一语言,您可以将这些片段应用于从JavaScript到PHP或Python
2021-09-27 09:48:59
453
原创 要实现一个死循环是使用for(;;)还是while(1)?
,while(1)在debug时候是有区别的,while(1)比for(;有时候,我们需要写个死循环,执行重复命令,要么写for,要么就while,还有goto,不过goto能不用则不用。可以看到打印·“1”前,先执行了test,通过zf判断是否跳走,然后在打印,然后跳回3219EE。可以看出来,在release编译后,for(;不过,刚才看的是debug,在debug模式下,编译器是不会对代码进行优化的例如。以上代码,在debug模式下是会有关于int x=1+1的汇编代码产生的,
2021-09-17 16:08:40
797
原创 const int,int const,const int*,int const*,int* const有什么不一样?
就这几种。有啥不一样? const int a; int const b; const int* a1; int const* c1; int* const首先,要明白一点,const 这个关键字,实在编译期间作用的,用来判断被修饰对象是否可以被修改,编译以后,程序本身没有关于这个关键字的运行方式,也就是说,程序执行时,变量进入寄存器或者内存中,本身不具有是否可读写属性。所以在编译期间就会发现程序是否编写错误怎么理解上面的const 呢?可以把const 看作是用来修改变量类型的,比如.
2021-09-10 10:05:15
4330
原创 为啥我的char[]能修改char*却不行?
首先把1给了eax,然后执行位移3,把EAX,变成8,把a的地址,也就是字符串的地址给了ecx,然后吧64h也就是d,赋值给[ecx+eax] 那个位置,也就是j的位置,因而你操作的是数据段中的那个字符串,就是上面的原因,系统会阻止你修改数据段,因而报错。变量a,p他们都是操作相同的字符串,两个字符串完全相同,所以,程序编译后,生成的文件内,完全没有必要保存两个相同的内容,只保留一个便可以,所以,你的程序,不管多少次使用这个字符串,实际上都是从一个地方引用的,这就是,这两句代码。少扯淡没用的,直接上代码。
2021-09-07 20:36:12
1053
原创 手机程序员常说的webview到底是个啥东西
很多,随便打开个看看,从文件结构上去看,基本上差不了多少,从名字也上也能分析出来,这个是不同平台下使用的东西,选择一个文件夹进入,win代表windows,平常多用windows,所以看这个,比较好理解。总上所述,其实webview并不是安卓或者IOS独有的东西,webview就是个对不同平台开放的webkit有API,也包括对Ios和安卓,他定义了在不同平台下的操作方式,以及不同平台下,不同的特性,比如在win平台下利用createwindow来创建窗口,用消息方式来处理各种交互等。
2019-01-04 21:06:14
25696
原创 Ajax在浏览器上具体是如何执行的(3)
最后一讲,说说readystatechange,前一篇文章说过webkit的请求方式,以及如何返回数据,如何实现的异步等,今天讲整个ajax请求的最后一步,请求回来的数据是如何使用的第一篇(http://www.ltplayer.com/blog/2018/12/24/ajax1/)文章说过webkit会使用setJSXMLHttpRequestOnreadystatechange将你的onr...
2018-12-29 12:31:15
620
原创 Ajax在浏览器上具体是如何执行的(2)
上一节把javascript执行流程接介绍完,本章将再介绍一个问题,就是在浏览器端,javascript是如何实现异步的?要想讲明这个问题,首先就要弄明白一个问题,异步是什么东西.事实上,异步只不过是在本程序内部,启动另外一个线程执行你要执行的代码,你的程序启动在主线程中,而异步是启动在另外一个线程内。线程事实上只是你将程序执行的顺序,交给操作系统,操作系统,在你需要时候改变CS,IP.语言并...
2018-12-28 14:22:52
611
原创 Ajax在浏览器上具体是如何执行的(1)
这句话会调用Source\WebCore\bindings\js\JSXMLHttpRequestCustom.cpp,目的是通过参数进行调用不同的函数重载,有一些参数,比如user,async这些都是判断时候同步,是否有用户名,密码KURL是webkit处理url时的统一类,主要记录url地址jsUndefined() 是每一个jsc函数扩展的返回类型,如果没有js返回,则返回jsUndefined(),就是js代码中的undefied;使用Ajax的时候,javascript扮演的角色是什么?
2018-12-27 21:22:55
1606
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人