随笔分类 - C++基础
摘要:我在定义圆的直径时,考虑到不可能是负数,就定义成了 unsigned int 但是在做两个直径的差时,遇到了问题,就是为负数时会得到一个极大的正值,因为返回的结果类型必定是 unsigned int 这虽然是很基础的知识,但是在做差时,根本不会想起来这是unsigned int类型,认为得到的就是负
阅读全文
摘要:C++的可变参数模板不在本文讨论范围,只用了C的可变参数 ... 做了如下约定: 第一个函参是参数个数 所有可变参数都是size_t类型 #include<stdarg.h> //for va_start等 #include<vector> void add(size_t count,...) //
阅读全文
摘要:在学习swap函数时,若想改变实参,可以将函参设置为指针类型。 那么函参中的双重指针,也是这种含义。想改变实参(指针类型)的指向或值时,可以用双重指针。 void change(char* p) { p = "bbb"; } int main() { char *v = "aaa"; change(
阅读全文
摘要:为了防止日志一直打印输出,只在状态改变时打印一次 #include<iostream> int main() { ///////////////////////////////////////// 对于两种状态切换情况 { bool m_bOnline = true; //默认在线 bool m_b
阅读全文
摘要:联合体类型,变量成员共用同一内存,同一时刻只能保存一个成员的数据。 以1个4字节数据,传递r\g\b为例 #include<stdint.h> #include<iostream> int main() { uint32_t myV; //用于模拟值传递 //写 { union { struct {
阅读全文
摘要:数据通信领域为了提高效率和节省空间,经常传输具体的字节数。 图像的红绿蓝值一般是uchar类型0~255,即1个字节。那么可以用int类型存红绿蓝(4个字节足够存3个字节的内容)。 //char占1个字节,int占4个字节,足够存3个char uchar r = 15; uchar g = 162;
阅读全文
摘要:字符串是否相等(大小写敏感) 两种方法:strcmp比较、转string再比较 #include <string.h> //for C strcmp #include <stdio.h> //for C printf #include <string> //for C++ string int ma
阅读全文
摘要:【释放内存】 本质:标识符放弃对该内存的占有权。即“释放内存”就是释放占有权。 若该内存是栈内存,当所有标识符都放弃,那么系统自动重获占有权。内存依然存在,地址、值都未改变。 若该内存是堆内存,当所有标识符都放弃,不delete,那么系统也无法拥有占有权。所以delete让系统重获占有权。内存依然存
阅读全文
摘要:相机SDK中一般有这样的回调:当帧采集完毕,自动调用回调函数。 回调函数用于通知机制:当某一事件发生时,如果使用者注册过了回调函数,则会自动执行回调函数中的内容。 网上很多回调函数的内容都是简单的使用下,没有太多关于通知机制的内容,于是找了一个案例 //sdk.h typedef void(*REC
阅读全文
摘要:万物皆内存,内存有两个东西:地址、值。 普通变量、引用变量、指针变量,二级指针变量,数组,指针数组...等等,皆内存。 【指针】 int x = 10; //变量 int* pX = &x; //指针变量 int** ppX = &pX; //二级指针变量 //地址,值 std::cout << &
阅读全文
摘要:#include<fstream> //for ifstream、ofstream template<typename OB> inline void saveObject(const char*filename, OB & object,int length) //传入要保存的对象引用 { std
阅读全文
摘要:与数组一样,结构体的指针指向首地址。 【数组 与 struct 互相赋值】 将数组中元素赋值给struct中元素(类型需一致,否则保持默认值),若数组元素少,struct中未被赋值的保持默认值。若数组元素多,对应位置的元素会赋值给struct。 #include<iostream> struct M
阅读全文
摘要:位域更节省空间,占用更少的字节(指定占用的bit数,而不是直接整个byte占用) 下述结构体占4字节 struct tagStudent { unsigned short s1; //2 unsigned short s2; //2 }; 修改成位域,占2字节 struct tagStudent2
阅读全文
摘要:方式一: int *a=nullptr; //在某个地方,知道数量count后 a=new int[count]; 方式二: //c++的vector vector<int> array; array.push_back(8); array.push_back(9); array.push_back
阅读全文
摘要:样例如下: #include <iostream> class B { public: int Fun() { return 100; } } class A { public: B* CreateB() //new了个B对象 { return new B(); } } int main() { A
阅读全文
摘要:一块图像采集卡上有两个CameraLink接口,程序里“采集卡”理解为:一个接口就是一个采集卡。即工控机上插一块,就是两个采集卡对象。 【问题】函数(void *) 被哪个采集卡调用了? 下面通过IKap、Matrox、Silicon三个采集卡的案例来理解 1、 2、 3、Windows的创建线程函
阅读全文
摘要:【结论】 一、在有些情况下,必须使用初始化列表。特别是const和引用数据成员被初始化时。 二、从效率方面来说,对于内置类型或复合类型,差异不会太大,但对于非内置数据类型,差异还是很明显的 【具体参考】 C/C++ 通过初始化列表和构造函数内赋值初始化成员变量的区别_Zju_Jemery的博客-CS
阅读全文
摘要:【推荐】 基类建议使用虚析构函数,其子类、孙类不使用虚析构。 当一个类不作为基类使用时, 不建议使用虚析构函数, 虚析构函数会增加一个虚函数表指针的长度,从而增加类对象的占用空间 【具体现象】 1、基类析构函数不定义为虚析构,当我们用基类指针指向子类对象的时候,只会调用基类析构函数 2、当基类设置为
阅读全文
摘要:[全局]std::vector存储[局部作用域]的基本数据类型:在push_back的时候,会将局部数据的值拷贝到vector的指定的内存区域,之后局部数据在生命周期结束后释放。【参考】(9条消息) 关于全局std::vector和局部变量存储的总结_局部变量vector_疯花正猫的博客-CSDN博
阅读全文