写这个随笔说一下C的static_cast和dynamic_cast用在子类与父类的指针转换时的一些事宜。首先,【static_cast,dynamic_cast】【父类指针,子类指针】,两两一组,共有4种组合:用static_cast父类转子类、用static_cast子类转父类、使用dynamic_cast父类转子类、用dynamic_cast子类转父类。搞清楚了这4种情况,这篇文章的任务也就达成了。 先说结论,后面给出一个作者觉得通俗易懂的理解: 1. static_cast:父类转子类:可以转,不报错,不安全; 2.static_casrt:子类转父类:可以转,不报错,安全;...

  51W0KX9NVoMu   11天前   15   0   0 C++

类应该是被封装的,类的用户通过接口使用类提供的功能,而不必关心类的内部如何实现。然而,C标准库容器std::vector的实现渗透到了接口中来。对于以下代码: constintpushNum=10; std::vector<int>v={1,2,3}; intp=&v[1]; std::cout<<"p="<<p<<std::endl; std::cout<<"v[1]="<<v[1]<<std::endl; for(inti=0;i<pushNum;i) v.push_back(i); std...

  51W0KX9NVoMu   2023年11月27日   20   0   0 C++

/usr/bin/ld:/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/Scrt1.o:infunction`_start': (.text+0x24):undefinedreferenceto`main' collect2:error:ldreturned1exitstatus    在使用g编译链接两个C源文件main.cpp以及VecAdd.cpp时出现了以上编译报错。main.cpp中引用了VecAdd.cpp中定义的函数vecAdd来实现两个向量的加法。我们先说原因,再来分析一下g为什么会报这样的...

  51W0KX9NVoMu   2023年11月02日   45   0   0 C++

C源程序需要经过预处理、编译、汇编几个阶段,得到各自源文件对应的可重定位目标文件,可重定位目标文件就是各个源文件的二进制机器代码,一般是.o格式。比如:util1.c、util2.c及main.c三个C源文件,经过预处理器、编译器、汇编器的处理,就可以得到各自的目标文件util1.o,util2.o以及main.o。可重定位目标文件中的地址是从0开始的,需要链接器将若干个可重定位目标文件通过符号解析、重定位等工作,链接成为一个可执行的二进制目标文件。在Linux下,可以使用gcc-c对源文件进行预处理、编译、汇编,得到目标文件:  可以看到源文件util1.c及util2.c被编译...

  51W0KX9NVoMu   2023年11月02日   15   0   0 C语言

通常来说,对于类内动态分配资源的类需要进行拷贝控制:要在拷贝构造函数、拷贝赋值运算符、析构函数中实现安全高效的操作来管理内存。但是资源管理并不是一个类需要定义自己的拷贝控制成员的唯一原因。CPrimer第5版中给出了一个Message类与Folder类的例子,分别表示电子邮件消息和消息目录。每个Message可以出现在多个Folder中,但是,任意给定的Message的内容只有一个副本。如果一条Message的内容被改变,我们从任意的Folder中看到的该Message都是改变后的版本。为了记录Message位于哪些Folder中,每个Message都用一个set保存所在的Folder的指针,...

  51W0KX9NVoMu   2023年11月02日   33   0   0 C++
关注 更多

空空如也 ~ ~

粉丝 更多

空空如也 ~ ~