c++
文章平均质量分 71
木大白易
我用双手成就你的梦想!
展开
-
C++ 手记(二):C++ 11新增的好用feature
【声明】:本文为网络和个人学习总结汇总,方便查阅!除了前文已经提到了extern外部模板,lambda表达式以外,还有一些比较好用feature:C++11 引入了委托构造的概念,这使得构造函数可以在同一个类中一个构造函数调用另一个构造函数,从而达到简化代码的目的:继承构造在继承体系中,如果派生类想要使用基类的构造函数,需要在构造函数中显式声明。而在c++11中:直接就可以使用基类的所有构造函数了,更重要的是,如果其中某一个继承构造函数不被相关的代码使用,编译器不会为之产生真正的函数代码,这样比透传原创 2024-02-05 16:42:07 · 1131 阅读 · 0 评论 -
C++ 手记(一):常用基础知识
extern 存储类用于提供一个全局变量的引用,全局变量对所有的程序文件都是可见的。当有多个文件且定义了一个可以在其他文件中使用的全局变量或函数时,可以在其他文件中使用 extern 来得到已定义的变量或函数的引用。通常用于当有两个或多个文件共享相同的全局变量或函数。原创 2024-01-30 21:03:03 · 982 阅读 · 0 评论 -
Mac下手动源码编译安装Swig
下载链接:https://github.com/PhilipHazel/pcre2/releases。也是使用rpath,但是在/usr/local/lib目录下确实没有libc++。下载链接:https://www.swig.org/download.html。swig依赖pcre库,需要先安装pcre。我这里需要的版本是4.0.2。,选择自己所需版本下载。原创 2024-01-30 20:58:57 · 1342 阅读 · 0 评论 -
Android JNI浅析、Java和Native通信对象的传值和回调
JNI是一个本地编程接口,它允许运行在Java虚拟机的Java代码与用其他语言(如C,C++和汇编)编写的库交互。原创 2023-03-08 16:21:36 · 1669 阅读 · 1 评论 -
C++11:互斥锁std::mutex和std::lock_guard/std::unique_lock
C++11中新增了std::mutex,它是C++标准程序库中的一个头文件,定义了C++11标准中的一些互斥访问的类与方法等。mutex是ualclusion(互斥)的简写。原创 2022-10-24 15:58:49 · 3544 阅读 · 0 评论 -
C++11:移动语义Move Semantics和完美转发Perfect Forwarding
关于右值引用的说明,我们在上一篇文章中已经通过具体的例子来了解了!那么它到底有什么用?我这里引用一下一篇2006年非常经典的论文的原文:!推荐大家阅读一下!这里简单翻译一下就是:事实证明,右值引用和左值引用的组合正是轻松编码移动语义所需要的。右值引用也可用于实现完美转发,这是 C++ 中迄今为止未解决的问题。从普通程序员的角度来看,我们从右值引用中得到的是更通用、性能更好的库。原创 2022-10-09 16:44:24 · 570 阅读 · 0 评论 -
C++11:左值、右值、左值引用、右值引用有什么区别?
能够取地址,有名字的值就是左值编译器允许我们对左值建立引用,但不允许对右值建立引用。也就是说常量左值引用即可以操作左值,也可以操作右值。举个例子:int a = b+c, a 就是左值,其有变量名为a,通过&a可以获取该变量的地址;表达式b+c、函数int fun()的返回值是右值,在其被赋值给某一变量前,我们不能通过变量名找到它,&(b+c)这样的操作则不会通过编译。但这种定义出来的右值引用并无实际用处:一方面,右值引用主要用于移动语义和完美转发,其中需要有修改右值的权限;转载 2022-10-09 11:45:09 · 457 阅读 · 0 评论 -
JNI内存方面说明以及相关类型手动释放内存
它的生命期是在Native Method的执行期开始创建(从Java代码切换到Native代码环境时,或者在Native Method执行时调用JNI函数时),在Native Method执行完毕切换回Java代码时,所有Local Reference被删除(GC会回收其内存),生命期结束(调用。注意Local Reference的生命周期,如果在Native中需要长时间持有一个Java对象,就不能使用将jobject存储在Native,否则在下次使用的时候,即使同一个线程调用,也将会无法使用。转载 2022-09-19 20:56:57 · 1093 阅读 · 0 评论 -
VSCode c++和CMake环境搭建(for Mac OS)
VSCode直接去官网下载即可!原创 2022-08-21 01:26:27 · 1943 阅读 · 0 评论 -
介绍一种性能较好的 Android native unwind 技术
设计实现 QUT 的初衷是希望在 32 位环境下通过 hook 监控某些资源使用的调用栈,过程中察觉到 libunwindstack 的性能问题也发现基于异常处理的回溯有不少的改善空间。业界也有人提出类似的思路,比如 Reliable and Fast DWARF-Based Stack Unwinding 这篇论文 [12] 就描述了精简回溯过程后直接生成机器码的技术,有很大参考意义。...转载 2022-08-15 11:22:51 · 1435 阅读 · 0 评论 -
C/C++ 宏拼接和宏展开为字符串
前言有一个需求是将一个宏和一个字符串拼接,然后在代码中拿到这个字符串,记录一下。方案首先,我们知道非常常见的一个宏的拼接和展示字符串的宏定义:#define CONTACT(x,y) x##y //拼接#define STR(x) #x //转字符串这种宏定义在开发中是很常见的!但是,如果上边我们那个需求中,让一个字符串和一个宏的值进行拼接的话,纯粹使用上边的宏就不行了,这里我们要使用二级的宏,这样才能拼接到宏的值://二级#define CONTACT2(x,y) CONTAC原创 2022-03-14 20:13:35 · 14451 阅读 · 1 评论 -
C/C++使用dlopen手动加载动态so库
前言类似于Java中System.load()和System.loadLibrary(),在native层就是通过dlopen打开,然后dlsym去获取函数或者变量的符号。手动加载C中动态加载举个例子,在c中打开x264的一个函数:#include <x264.h>#include <dlfcn.h>typedef int (*x264_encoder_encode_func)(x264_t *, x264_nal_t **pp_nal, in原创 2022-03-01 15:33:01 · 3159 阅读 · 0 评论 -
C/C++ “undefined reference to XXX“问题总结
这里看到一篇总结非常全面的文章,记录一下:"undefined reference to XXX"问题总结原创 2022-02-28 16:08:15 · 1185 阅读 · 0 评论 -
CMake构建类型和编译选项
本文转自:https://hijk.tech/cmake-tutorial/05/构建类型构建类型(Build Type)指的是编译构建一个代码工程时采用的配置。对于使用IDE的工程,一般可以在IDE内的选项上修改构建类型,例如Visual Studio工程中的Configuration,默认分为Debug和Release,在每次编译前可以选择使用哪一种。但对于命令行式的构建系统,一般需要自己调整makefile中的编译选项,来实现不同的构建类型。使用cmake可以不必手动修改编译选项,能够方便的切换构转载 2021-12-17 18:43:01 · 6783 阅读 · 0 评论 -
loadLibrary动态库加载过程分析
http://gityuan.com/2017/03/26/load_library/原创 2021-12-16 11:48:13 · 601 阅读 · 0 评论 -
C++11:智能指针
RAIIRAII,全称资源获取即初始化(英语:Resource Acquisition Is Initialization)。RAII要求,资源的有效期与持有资源的对象的生命期严格绑定,即由对象的构造函数完成资源的分配(获取),同时由析构函数完成资源的释放。在这种要求下,只要对象能正确地析构,就不会出现资源泄露问题。传统 C++ 中,『记得』手动释放资源,总不是最佳实践。因为我们很有可能就忘记了去释放资源而导致泄露。 而 C++11 引入了智能指针的概念,使用了引用计数的想法,让程序员不再需要关心手动原创 2021-08-19 17:24:53 · 695 阅读 · 0 评论 -
C++11:Lambda表达式
声明Lambda表达式完整的声明格式如下:[capture list] (params list) mutable exception-> return type { function body }各项具体含义如下capture list:捕获外部变量列表params list:形参列表mutable指示符:用来说用是否可以修改捕获的变量exception:异常设定return type:返回类型function body:函数体但是并不是所有的项都必须写全,可以省略一些不需原创 2021-08-17 20:43:09 · 342 阅读 · 0 评论 -
C++:标准转换运算符reinterpret_cast
转自:https://www.cnblogs.com/ider/archive/2011/07/30/cpp_cast_operator_part3.html另外系列文章part1,part2,part4,part5对其他几种转换const_cast,static_cast,dynamic_cast都有较清晰深入的讲解!收藏一下!语法reinterpret_cast <new_type> (expression)介绍reinterpret_cast运算符是用来处理无关类型之间的转换;转载 2021-08-16 15:51:15 · 484 阅读 · 0 评论 -
C++11:std::function<void()> func;
转自:使用std::function作为函数入参关于std::function()在C语言的时代,我们可以使用函数指针来吧一个函数作为参数传递,这样我们就可以实现回调函数的机制。到了C++11以后在标准库里引入了std::function模板类,这个模板概括了函数指针的概念函数指针只能指向一个函数,而std::function对象可以代表任何可以调用的对象,比如说任何可以被当作函数一样调用的对象。当你创建一个函数指针的时候,你必须定义这个函数签名(表征这个函数的入参,返回值等信息);同样的,当你创建转载 2021-08-16 14:24:38 · 15531 阅读 · 1 评论 -
在c++头文件中写#include类的头文件与直接写class加类名有何区别
实例我们能看到这样的写法:A.h#include "C.h"class B;class A{ //...}A.cpp#include "B.h"class A{ //...}在A类的头文件中使用了#include xx.h,也有声明class xx,那么这两种写法有什么不同?不同class 类名只是声明存在这么一个类,但是通过这个声明无法得到任何关于此类的具体信息。这样你可以在其他使用到的地方声明一个该类型的指针。#include头文件则是将整个该头文件与使用原创 2021-07-05 14:23:05 · 2788 阅读 · 0 评论 -
C++学习笔记
本文来自菜鸟教程的总结。指针指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址。一般形式为type *nametype为指针的基类型,name为指针变量的名字,*用来指示这个变量是指针。int var = 20; // 实际变量的声明int *ip; // 指针变量的声明 ip = &var; // 在指针变量中存储 var 的地址//打印相关变量的值//var----->20 表示变量var//ip----原创 2021-06-10 14:34:12 · 1152 阅读 · 1 评论