c++
zhjwang的博客
这个作者很懒,什么都没留下…
展开
-
reinterpret_cast
reinterpret_cast用于进行各种不同类型的转换不同类型指针之间不同类型引用之间指针和能容纳指针的整数类型之间的转换编译期处理,执行的是逐字节复制的操作类似于显式强转,后果自负#include "stdafx.h"#include <iostream>#include <string>using namespace std;void foo(){ cout << "foo()" << endl;原创 2021-04-21 23:31:57 · 955 阅读 · 0 评论 -
dynamic_cast
dynamic_cast用于具有虚函数的基类与派生类之间的指针或引用的转换。基类必须具备虚函数原因:dynamic_cast是运行时类型检查,需要运行时类型信息(RTTI),而这个信息是存储与类的虚函数表关系紧密,只有一个类定义了虚函数,才会有虚函数表。运行时检查,转型不成功则返回一个空指针非必要不要使用dynamic_cast,有额外的函数开销常见的转换方式:基类指针或引用转派生类指针(必须使用dynamic_cast)派生类指针或引用转基类指针(可以使用dynam原创 2021-04-21 23:31:10 · 186 阅读 · 0 评论 -
强制转换运算符----const_cast
强制转换运算符----const_cast强制类型转换是有一定风险的,有的转换并不一定安全,如把整型数值转换成指针,把基类指针转换成派生类指针,把一种函数指针转换成另一种函数指针,把常量指针转换成非常量指针等。C++ 引入新的强制类型转换机制强制转换运算符C++ 引入了四种功能不同的强制类型转换运算符以进行强制类型转换:const_caststatic_castreinterpret_castdynamic_castC语言强制类型转换缺点:主要是为了克服C语言强制类型原创 2021-04-21 23:30:05 · 308 阅读 · 0 评论 -
在c++中,有时候需要把一些公共的部分提取出来一个.h中,然后在每个需要的地方去包含这个头文件。这个时候一般会出现重定义。
在c++中,有时候需要把一些公共的部分提取出来一个.h中,然后在每个需要的地方去包含这个头文件。这个时候一般会出现重定义。例如:有个文件是common.hconst char * SS5_SERVER_IP = "44.211.15.90";const int SS5_SERVER_PORT = 10808;const int TEST_UDP_PORT = 10888;然后在a.cpp和b.cpp中去包含的时候,在连接的时候就会出现重定义。原因就是在编译完的每个.o中上面这份代码都定义了,在连原创 2021-04-19 22:11:52 · 249 阅读 · 0 评论 -
c++编译和链接的过程,有助于理解常见的编译错误
c++编译和链接的过程,有助于理解常见的编译错误1.预编译这一步可以粗略的理解为只做一件事“宏展开”,#include会用源文件替换。2.编译编译器通过后缀名来辨识是否编译该文件,因此“.h”的头文件一概不理会,而“.cpp”的源文件一律都要被编译.编译是一个个独立的文件作为单元的,一个文件就会编译出一个目标文件,这一点很重要,因此编译只负责本单元的事情,而对外部的事情一概不理会。在这里,我们可以调用一个函数而不必给出这个函数的定义,但是要在调用前得到这个函数的声明。其实这就是include的本质原创 2021-04-19 22:10:03 · 170 阅读 · 0 评论 -
开发中的小知识点积累
1.类名后面带final表示该类是不能被继承的,如果继承了会编译错误class bootstrap final 2.匿名的命名空间在c中,我们一般使用static让函数只作用与本文件(.c)中。在c++中,与之类似的做法是在文件中声明一个匿名的命名空间,将只是要作用于本文件的函数放置到这个匿名的命名空间。namespace { void test(){ //这个函数只是作用于本文件中 }}...原创 2021-04-19 22:01:04 · 87 阅读 · 0 评论 -
extern “C“(详细剖析)
在工作中,经常看到如下代码:#ifdef __cplusplusextern "c" {#endif#include <typedef.h>#include <errcode.h>typedef void * my_handle_t;my_handle_t create_handle(const char* name);void close_handle()#ifdef __cplusplus}#endif这与C++有什么关系呢? 看看__cplusplu原创 2021-04-19 21:56:04 · 296 阅读 · 0 评论 -
c++继承解决的是代码复用的问题
1.继承this的问题#include <iostream>class A {private: int a;public: void setA(int a_) { this->a = a_; } void printfA(){ printf("a:%d\n",this->a); }};class B : public A {原创 2021-04-19 21:38:48 · 185 阅读 · 0 评论 -
c++ 实现简易mvvm架构模型,不知道对不对
最近因为要用c++实现mvvm。对这些架构(MVC, MVP, MVVM)雨里雾里。看了一些文章介绍,总体觉得mvvm除了前后端分离,解耦,最大的特点是数据的双向绑定,即当view改变时,可以通过viewmodel自动改变model,当model改变时,也可以通过viewmodel自动改变view。如果理解偏差,前辈们多多指点。感谢!实现思路:采用回调函数的方法:即在view初始化的时候bind一个修改view自身数据的function。 同样在初始化model的时候,bind一个修改model自身的原创 2021-03-09 17:29:25 · 1974 阅读 · 4 评论