c++
skillfulit
这个作者很懒,什么都没留下…
展开
-
mongodb find rewrite
mongodb find rewritemongodb find 查询转换与重写,在语义和实际结果相同的前提下,实现文章目录mongodb find rewritewrite 1find coderesultexplainwrite 2find coderesultexplainwrite 3find coderesultexplainwrite 1find codedb.inventory.find({$and:[{qty:{$gt:50,$lt:100,$type:1}}]})resu原创 2020-10-20 17:32:40 · 75 阅读 · 0 评论 -
c++类方法继承与重载内部实现
1、c++类方法继承与重载内部实现 在子类存储开始部分,额外分配指向父类vtab的指针 在实现时,首先定位到父类vtab的入口地址,再根据方法索引,确定最终方法具体地址 较直接方法调用,需要根据vtab进行方法的寻址过程2、源代码#include <iostream>using namespace std ;class supper{ protected : virtual void doSome()原创 2020-07-14 13:43:44 · 369 阅读 · 0 评论 -
关于c++多继承成员函数名冲突的解决方案及调用实质比较
关于c++多继承成员函数名冲突的解决方案及调用实质比较源代码源码分析目标码对比分析1、 ==类型转换明确超类方法==2、==类型转换明确超类方法==源代码#include <iostream>using namespace std;class Dog{ public: virtual void bark() { cout << "Woof!" << endl; } virtual原创 2020-07-13 13:26:03 · 682 阅读 · 0 评论 -
关于c/c++ 大struct赋值语句生成的目标码分析
代码节选typedef struct student { long long stu_id; char *stu_name; char *info; char *pos; char *email; char home[1024];} t_student;t_student s1,s2 ;s1.stu_name ="Guess my name" ;s2 = s1 ;跟踪生成的目标码 0x0000000000400883 <原创 2020-07-06 12:00:02 · 233 阅读 · 0 评论 -
cygwin 环境
http://mirrors.163.com/cygwin/setup-x86_64.exe -q -P cmakesetup-x86_64.exe -q -P gcc-coresetup-x86_64.exe -q -P gcc-g++setup-x86_64.exe -q -P makesetup-x86_64.exe -q -P gdbsetup-...原创 2020-03-31 18:09:20 · 176 阅读 · 0 评论 -
关于c++模板函数编译器内幕
写一个简单模板函数,功能是将输入的值增加2,用了4个不同类型的实参,分别是int,float,char和int *p 类型,通过反汇编发现,的确生成了4函数(addTwoIiET_S0,addTwoIfET_S0,addTwoIcET_S0,addTwoIpiET_S1),通过对比函数名,不难有如下发现:1、I表示输入2、I后面表示输入参数的类型,从本案例来看 i...原创 2018-09-28 17:35:51 · 223 阅读 · 0 评论 -
c++多继承类的大小为所有直接基类大小的总和
在c++中,如果一个派生类继承了多个基类,那么该继承类的大小是所有基类大小的总和,当寻址特定基类数据成员时,或调用基类成员函数时,首先要找到基类在派生类中的偏移,再与派生类基址相加得出基类首地址(this指针所指向地址)。 如下图,定义了三个基类cbA,cbB,cbC,派生类cAB继承了这三个基类,第一个基类大小为4,第二个大小为8,第三个为12,故继承类的大小为24...原创 2018-09-28 15:15:03 · 635 阅读 · 0 评论 -
如何修改引用变量存储单元内的值
引用变量与指针变量类似,引用变量与指针变量区别在于,引用变量初始化后,其存储单元内的值不会发生变化,是特定变量的别名,在函数参数传递中,是变量的地址;而指针变量其值没有限定。 如下图,引用变量是占用了存储单元的,那么如何才能获得引用变量的存储单元地址呢 ...原创 2018-09-26 13:45:15 · 1180 阅读 · 0 评论 -
关于c++中const修饰的常量注意事项
在c++中,由const修饰的常量,理论上,在程序的整个运行期间,其值是保持不变的,也不能修改其值,但可以通过非常规方法修改它的存储单元中的值,这样就造成同一地址单元出现了多个值的情况。如下是常规方法修改常量 如下是非常规修改方法 总结: 1、由const修饰的常量是有存储空间的 ...原创 2018-09-25 16:11:44 · 335 阅读 · 0 评论 -
main函数argv两种参数差异比较
#include | #include |原创 2017-11-04 22:29:04 · 330 阅读 · 0 评论 -
指向指针的指针剖析
1 #include 2 #include 3 4 void swap_str(char **a,char **b) ; 5 int main() 6 { 7 8 char * p1= "apple" ,* p2="orange" ; 9 10 11 printf("before swap pointer原创 2017-11-04 20:57:53 · 185 阅读 · 0 评论 -
关于c++类静态成员分析
c++类静态成员特点:1、在类中申明,在类外别处定义2、该类所有实例,都共享类外定义存储单元3、类实例不会为它分配空间去引用类外定义的存储单元4、在访问类静态成员时,是采用指令指针在偏移方式实现的如下源码含有静态成员a, #include using namespace std;class shared {static int a;i原创 2016-10-20 23:03:16 · 240 阅读 · 0 评论 -
c++类不含有数据成员(静态除外),则不会为该类实例分配存储空间,该类实例只占用一个字节空间
c++类不含有数据成员(静态除外),则不会为该类实例分配存储空间,于是类实例地址是按字节对齐见如下分析过程1、类Counter 除了一个静态数据成员外,没有其它任何非静态数据成员了2、sizeof该类,其结果为13、引用该类实例时,基址寄存器加上偏移,如实例Counter o1;(lea rax,[rbp-0x11])class Counter {public:原创 2016-10-21 06:15:07 · 686 阅读 · 0 评论 -
关于c++构造函数、析构函数在全局实例(global)和在局部实例先后顺序
1、全局静态类实例构造函数调用顺序_start__libc_start_main__libc_start_main __libc_csu_init //这个过程迭代所有全局变量的初始化工作(构建函数)2、上步完成后,进入主函数,根据实际情况构建类实例3、在退出主函数前,调用所有实例化的对象析构函数4、全局静态实例析构函数__GI_exit原创 2016-10-21 11:52:22 · 1013 阅读 · 0 评论