C/C++
文章平均质量分 88
FlyerGo
一个渴望蜕变的码农
展开
-
C++之虚函数
都说面向对象的三大特性是封装、继承、多态。C++作为一门面向对象编程语言,肯定也是具备了面向对象的三大特性,那么在C++中是如何实现多态的呢?在C++中是通过虚函数动态绑定的方式实现多态的。虚函数与纯虚函数首先我们来回顾一下虚函数,在C++中是使用virtual关键字修饰的函数就是虚函数,下面是一个简单的虚函数例子:class Base{public: // 虚函数,必须实现,否则编译报错 virtual void f1() const{ std::cout <原创 2022-04-29 20:39:17 · 3062 阅读 · 0 评论 -
JNI之数组与字符串的使用
字符串和数组是JNI中常见的引用数据类型,本文将介绍符串和数组在JNI中的常见处理方式。JNI中字符串的处理1、Java字符串与原生字符串转换当从java层传递一个字符串过来之后,它的类型是jstring,同样如果需要返回一个字符串给java层,它的类型也是jstring。jstring代表着Java虚拟机中的一个字符串,并且不同于C++语言的string类型。如果原生代码需要处理jstring,需要通过JNIEnv将其转换为原生字符串才可以使用。通过JNI函数GetStringUTFChars来读原创 2022-04-16 12:08:40 · 1487 阅读 · 0 评论 -
C++之异常处理
为什么引入异常在C语言中错误的处理,通常采用返回值的方式或是使用全局变量的方式。这就存在两个问题,一是如果返回值正是我们需要的数据,这就导致了返回数据同出错数据容错差不高。二是全局变量,在多线程中易引发竞争,而且,当错误发生时,上级函数要出错处理,层层上报,造成过多的出错处理代码,且传递的效率低下。因此C++引入了面向对象级别的异常处理机制。在C++中异常的处理和具体逻辑的处理不比在同一个函数中,这样就可以做到底层逻辑专注于功能的实现,具体错误处理交由上层业务逻辑去处理。异常如何使用?使用关键字原创 2022-04-07 23:41:59 · 3100 阅读 · 2 评论 -
C++之多线程(二)
导读做开发的人都知道多线程是一个很复杂的问题,一不下心就会出现莫名其妙的八哥,有句话调侃说:一个程序员碰到了一个问题,他决定用多线程来解决。现在他有了两个问题。。。在前面《C++之多线程(一)》 一文中,我们介绍了C++11中多线程的一些基本使用以及给线程传递参数时的一些注意事项。今天我们继续了解下C++11中多线程一些比较现代化的用法,以及一些线程同步的方法。async、future设想一下现在我们有这样的一个需求,我们需要开启一个线程去某件事情,待这件事情执行完毕后将结果返回,那该如何实原创 2022-04-07 23:41:03 · 388 阅读 · 0 评论 -
C++之多线程(一)
导读终于,在万众期待之下,C++11有了自己的线程库,实现了真正意义上的跨平台,今天在了解C++11线程库的同时,也来温习下POSIX线程。POSIX线程在C++11之前因为没有C++语言没有语言级别的线程库,所以在Linux上用的都是POSIX线程,POSIX的相关API大概如下:POSIX函数功能pthread_create创建线程pthread_exit退出线程pthread_join等待线程退出pthread_cancel取消线程pthre原创 2022-04-07 23:40:11 · 1081 阅读 · 0 评论 -
C++之类型转换
导读提到类型转换,相信有过编程经验的小伙伴们都不陌生了。之前笔者在《NDK编程Java如何保存C或C++对象》 一文就中使用了类型强转的方式。既然C++是继承于C的语言,那么它在类型转换上又做了哪些扩展呢?C语言式转换C语言式的类型转换很简单,通过一个括号即可完成强转:(Type)var;。虽然C语言式转换简单,但是它是有不少缺点的,比如它可以在任意类型之间进行转换,比如将const类型的对象转换成非const类型的对象,可以将一个基类的对象指针转化成一个派生类的对象指针等。这些强制转换对于C++原创 2022-03-31 15:05:40 · 2868 阅读 · 0 评论 -
C++之右值引用
有了左值引用为什么还需要右值引用?在平时编码过程为了减少数据的拷贝,提高性能,我们一般通过引用的方式来传递参数,例如:void func(const int &a){}int main() { func(10); // 可以 int a = 20; func(a); // 可以 return 0;}如果在上面的程序中我们将函数func中的const修饰去掉之后呢?我们发现调用func(10);居然无法通过了,这是为什么呢?在C++中带const修饰原创 2022-03-31 15:00:08 · 2343 阅读 · 0 评论 -
C++之const关键字
const作用const关键字在C++中真是无处不在,无论是函数参数,还是函数返回值,还是函数末尾都经常会看到const关键字,这表明C++中的const关键字是非常灵活的,合理地使用const关键字能大大提高我们程序的健壮性。被const修饰的即表明是常量性的、只读性的,不可随意修改的。因为const对象一旦创建后其值就不能再改变,所以const对象必须初始化。const在C和C++中的区别虽然在C中const也表示不可修改的意思,但是它的校验却没有C++中那么严格,比如在C中被const修改的原创 2022-03-31 14:54:26 · 2219 阅读 · 4 评论 -
C++之智能指针
导读在《C++之指针扫盲》一文中我们对指针进行了讲解,虽然原始指针是几乎无所不能,的确是一把利器,但就是这样的一把利器让多少人既爱又恨,一不小心就杀敌一千,自损八百,无论你是多么的严谨,总是很难从根本上避免内存泄漏。有没有好的方式去用好这把利刃而又不伤手呢?带着手套不就行了么。。。RAII在C程序中有一条行规是:谁开发谁保护,谁污染谁治理所以我们在很多库的API中经常发现一些传递二级指针的alloc函数和一些对应的xxx_free函数,这就是遵循谁开发谁保护,谁污染谁治理的原则。在进入智原创 2022-03-24 11:50:30 · 1266 阅读 · 0 评论 -
C++之指针和引用
指针和引用的区别?在C++的编码中我们发现很多地方都大量地使用引用,能用指针实现的功能改用引用几乎也能实现,甚至因为引用不需要拷贝的特性,使用起来比指针性能更高。那么指针和引用又有什么区别呢?更多关于指针的内容可以参考《C++之指针扫盲》1、指针可以为空,引用必须初始化,引用不能为空string& rs; //错误,引用必须初始化2、指针可以被重新赋值,但是引用不行。也就是指针可以重新指向另外一个对象,而引用却不行,引用一直指向的都是最初的那个对象。int main() {原创 2022-03-23 09:15:51 · 304 阅读 · 0 评论 -
C++之指针扫盲
前言指针对于学习C/C++的人来说是一道必须迈过去的坎,就像学习九阳神功必须要打通任督二脉一样的道理。虽然说随着智能指针的普及,很少需要程序员再手动操作原始指针,但是如果你连原始指针的都没学好,那你怎么可能用好智能指针呢?无论是原始指针还是智能指针,要想用好它就一定要做到知其然,知其所以然。因为本文阅读对象是有了一定指针基础的童鞋,所以如果你对指针如果是处于一无所知的状态的话,建议先去温习下指针的基础知识,不然可能读起来会打击你求知的欲望。指针为什么要有类型是为了指针运算和取值。当使用指针取值原创 2022-03-22 17:21:22 · 2102 阅读 · 0 评论 -
C++之RVO返回值优化
什么是RVO优化RVO的全称是Return Value Optimization。RVO是一种编译器优化技术,可以把通过函数返回创建的临时对象给”去掉”,然后可以达到少调用拷贝构造的操作目的,它是C++11标准的一部分。如果编译器明确知道函数会返回哪一个局部对象,那么编译器会把存储这个局部对象的地址和存储返回值临时对象的地址进行复用,也就是说避免了从局部对象到临时对象的拷贝操作。这就是RVO。main.cpp#include <iostream>using namespace std原创 2022-03-21 16:52:46 · 4460 阅读 · 2 评论 -
在mac上编译OpenCV4并导入CLion开发测试
OpenCV简介1、什么是OpenCVOpenCV是一个基于BSD开源许可发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。总结起来就是OpenCV是计算机视觉中经典的专用库,其支持多语言、跨平台,功能强大且开源免费。2、OpenCV能干什么OpenCV提供了许多内置的用于图像处理和计算机视觉相关操作的基础元素,可用作图像处理操作、视频分析、3D重建、特征提取、目标检测识别、机器学习等各大领域。未来可期…3、OpenCV的基础原创 2021-06-24 15:46:52 · 380 阅读 · 0 评论 -
重温C与C++之构造函数
写在前面相信做过Java、C++或者其他面向对象语言开发的朋友们一定对构造函数这个概念不陌生。以前初学C++的时候笔者看过几次《C++ Primer》这本书,但是每次都是走马观花式的快速阅读,每次浏览完之后内心就会冒出两个字:就这?现如今回想起来真是图样图森破 。学习最忌讳的就是心急如焚,砍柴不磨刀,所谓欲速则不达,一步一个脚印才能走得更稳。由问题开始下面我们就从几个问题出发,加深一下对C++中构造函数的了解:1、构造函数初始化与赋值的问题以下的这两个写法有什么区别?class Person原创 2021-05-19 16:03:00 · 155 阅读 · 0 评论 -
重温C与C++之结构体大小计算
前言所谓基础不牢,地动山摇。笔者作为一个Android开发者,虽然有些NDK相关的开发经验,但是在写C或C++代码的时候总有一种知其然,不知其所以然的感觉。随着后续可能在项目中使用大量使用C/C++代码,笔者意识到有必要巩固下自己的C/C++的基础,顺道给扫一下以前学习C/C++的时候留下的知识盲区。后续可能会不定期更新一些自己复习C/C++的简要笔记,这些笔记更多的是自己温习的过程中对某个知识点的加上自己的理解,如有误人子弟,恳请各位手下留情。字节对齐对于结构体大小计算这个问题可以说是C/C++原创 2021-05-17 17:12:47 · 613 阅读 · 0 评论