
C/C++
文章平均质量分 62
everlastxc
biu~biu~
展开
-
C/C++:继承基类模版之后的友元声明
这段代码中如果不将继承的基类模版声明为友元类就会出现编译错误,因为基类函数调用了子类的保护(也可以是私有)构造函数template <typename T>class Base{public: static T* instance() { return new T(); } Base() = default;...原创 2019-11-11 15:50:57 · 338 阅读 · 0 评论 -
C/C++: Pure virtual function called! 错误解析
了解这个错误的原因,首先要知道 C++对象 在构造和析构时,都做了什么事情?首先要说明这种情况是在 C++基类包含纯虚函数以及虚析构函数的时候出现的。那么,C++构造函数都做了什么事情呢?第一步:构造最顶层的基类部分 a、让实例指向基类的虚函数表 b、构造基类实例成员变量 c、执行基类构造函数第二步:构造派生类独有部分 a、让实例指向派...原创 2019-10-19 18:15:10 · 2731 阅读 · 1 评论 -
C/C++:宏定义的有效范围
在C/C++中,宏定义的有效范围被规定为当前文件内有效。 “当前文件内有效”分为两种情况,一种是定义在头文件中,另一种是定义在源文件中。 在头文件中的宏定义随着头文件一同被包含到源文件中时,此时宏定义在该源文件中也有效,但是当头文件中的宏定义随着该头文件一起被包含到另一个头文件中,而这另一个头文件又被一个源文件包含,则该宏定义在最终被包含的源文件中无效,也就是说,想使用头文件中...原创 2018-05-28 19:44:03 · 13521 阅读 · 5 评论 -
C/C++:定义指针的引用
C++中定义指针的引用有什么好处呢?首先指针引用的定义方式(以char类型为例): char* &ptr = xxx 我们知道在C语言中如果想改变实参指针所指向的位置,就要定义重指针,如下面的例子// 错误 实参指针不能被赋值void changePtr( char* ptr ){ ptr = (char*)malloc(100*sizeof(char))...原创 2018-06-10 12:37:21 · 3720 阅读 · 0 评论 -
音视频基础:RTP/RTCP协议
RTP协议 RFC3550定义实时传输协议RTP和它的控制协议RTCP。RTP协议是Internet上针对流媒体传输的基础协议,该协议详细说明在互联网上传输音视频的标准数据包格式。RTP本身只保证实时数据的传输,并不能提供可靠传输、流量控制和拥塞控制等服务质量保证,这需要RTCP协议提供这些服务。 IETF的RFC3550定义RTP/RTCP协议的基本内容,包括报文格式、传输规则等。...原创 2018-07-18 21:41:37 · 4525 阅读 · 0 评论 -
C/C++:标准库容器vector的用法及内存管理
C++中的标准库容器vector是一个类模板,可以根据想装入元素的具体类型来实例化一个vector容器,vector相当于一个动态数组,当你无法知道自己需要的数组规模具体要多大时,可以用它来解决问题,而且使用很方便。1.文件包含、变量声明#include <vector>#include <iostream>int main(){ std...原创 2018-08-15 16:44:42 · 1115 阅读 · 0 评论 -
C/C++:互斥锁和条件变量
互斥锁、条件变量和信号量是实现线程间同步的三种方式。在多线程程序访问临界资源时,可以对各个线程进行访问限制,每次只允许一个线程访问临界资源。条件变量相当于是互斥锁的一种补充,是线程中的东西,就是等待某一条件的发生,和信号一样。占有临界资源的线程在执行完对于资源的操作后,会发出“信号”,然后其它未占有资源的线程在感知到“信号”后就会抢占资源。互斥锁的使用需要的头文件:pthre...原创 2018-08-24 15:39:58 · 7880 阅读 · 1 评论 -
C/C++:从内存布局理解C++虚继承的实现原理
准备测试环境:Visual Studio 2017Visual Studio提供给用户显示C++对象在内存中的布局的选项:/d1reportSingleClassLayoutXXX // XXX替换为类的名字/d1reportAllClassLayout 创建工程取名为research,在research中找到research源文件右键该文件点击属性在r...原创 2018-09-13 21:08:29 · 1702 阅读 · 0 评论 -
C/C++:std::function 和 std::bind 以及占位符 std::placeholders::_n 的使用
头文件:<functional>std::function<...> std::function的实例可以对任何能够调用的目标实体进行封装调用,这些目标实体包括普通函数、lambda表达式、函数指针、仿函数、类的普通成员函数和类的静态成员函数等。std::function对象是对C++中现有的可调用实体的一种类型安全的封装(我们知道像函数指针这类可调用实...原创 2018-12-14 20:42:59 · 4251 阅读 · 0 评论 -
C/C++:用ifstream/FILE重复读取同一个文件
在音频的采集编码发送端,用 std::ifstream 将采集到的原始数据、前处理后的pcm数据或编码后的RTP数据包替换掉,就可以指定音频的输入源,在特定的输入源之下衡量音频传输/处理的效果。假如要替换pcm原始音频数据////////////////////////////////////////////////////////#include <fstrea...原创 2019-01-11 13:25:42 · 3339 阅读 · 0 评论 -
C/C++:lambda
一篇极好的文章,建议直接转到https://shaharmike.com/cpp/lambdas-and-functions/然后...再多说一点,lambda表达式只要没有最后表示执行的括号,其实就是一个对象,如下int main(){ int a; int b; char c; char d; auto func = [&a, b...原创 2019-06-08 16:07:10 · 5280 阅读 · 0 评论 -
Windows:传统声音API waveOut
在网上找到了一个 Windows传统声音API接口waveOut的使用demo,先保存下来以后用到的时候再拿来看。原文:https://blog.csdn.net/gb1230/article/details/41350189值得注意的是waveOutSetVolume(...)这个设置音量的函数,它可以设置程序音量和系统音量(网上有讨论说有些情况设置系统音量无效)关于这个函数的详细解释在...原创 2019-06-28 15:42:46 · 1754 阅读 · 1 评论 -
C/C++ 常用函数(持续更新)
1. strchr()函数 和 strrchr() 函数strchr定义于头文件 <string.h>const char *strchr( const char *str, int ch );寻找ch(按照如同(char)ch的方式转换成char后)在str所指向的空终止字节字符串(每个字符都被看做unsigned char)中的首次出现位置。终止的空字符被认为是字符串的一部分,并且...原创 2018-04-10 20:33:28 · 608 阅读 · 0 评论 -
C/C++ 常用宏(持续更新)
刚刚接触C++,发现这个语言比起Java来真是难出屎了,但是要做音视频开发,C++怎么说都是不可避免的,趁我还年轻,决心将它学好。言归正传..... C/C++标准库中包含许多宏定义,既然是在标准库中,那么这些宏定义肯定就是与平台无关的,当然还有一种宏就是与平台相关的预编译宏,大家基本也都见过。 为了以后查找方便,开了这篇帖子,记录一下见过的C/C++宏。当前源代码行号 ...原创 2018-04-10 19:47:29 · 1507 阅读 · 0 评论 -
Linux在Terminal中利用C语言进行清屏
想自己做一个腾讯课堂视频上面的在Linux终端上做火车票管理系统或者学生管理系统,对于界面的部分查了好久,原本以为是用了C语言的ncurses.h头文件,实际上只是打印了这个。这个是 ANSI/VT100 Terminal Control Escape Sequences详见 http://www.termsys.demon.co.uk/vtansi.htm#include &l...原创 2017-03-29 22:03:00 · 2273 阅读 · 0 评论 -
Android : C++调用Java
转载请标明出处:https://blog.csdn.net/qq_29621351/article/details/79870319通过这段时间接触JNI的过程,觉得JNI里面的坑还是挺多的,有的地方理解的也不是很周到,如果发现理解错的地方,请大家能够指出,我会立即改正。JNI可以理解为三层:Java层,JNI层,C++层。Java层就是Java语言编写的程序,C++层...原创 2018-04-15 15:54:55 · 1747 阅读 · 0 评论