
C/C++
Ftworld21
专注游戏开发。
展开
-
构造函数的用法
c++ 子类构造函数初始化及父类构造初始化_构造函数对父类进行初始化-优快云博客原创 2024-05-25 15:52:21 · 490 阅读 · 0 评论 -
new的用法
C++:new的用法_c++ new-优快云博客 c/c++里的new加括号与不加括号的区别_c++函数调用不加括号-优快云博客原创 2024-05-25 15:49:57 · 264 阅读 · 0 评论 -
override和final
C++干货系列——override和final详解 - 知乎原创 2023-07-04 16:23:10 · 100 阅读 · 0 评论 -
c++反射
百度百科较官方的定义:反射是程序可以访问、检测和修改它本身状态或行为的一种能力。其实简单理解反射就是程序在运行的过程中,可以通过类名称创建对象,并获取类中申明的成员变量和方法。例如在rpc中通过名字来调用函数。C++反射机制的实现_freshman94的博客-优快云博客_c++ 反射C++ 反射机制的简单实现 - 旭东的博客 - 博客园简述反射机制 - 奋进的小样 - 博客园...原创 2021-11-20 11:51:05 · 807 阅读 · 0 评论 -
fork函数
子进程中PID返回值为0,父进程中返回值为子进程的ID,因为父进程可能有很多子进程,而子进程只有一个父进程。C++ fork函数理解_一度凡尘的专栏-优快云博客_c++ fork原创 2021-10-20 15:31:02 · 88 阅读 · 0 评论 -
线程池基本用法
基于C++ 11的线程池简单实现_C++/Qt/音视频/RTC-优快云博客C++11并发学习之六:线程池的实现_草上爬的博客-优快云博客_c++ 线程池C++ 线程池的简易实现 - 云+社区 - 腾讯云https://wiki.jikexueyuan.com/project/cplusplus-concurrency-action/content/chapter9/9.1-chinese.htmlLinux C++ 实现线程池 - 简书https://segmentf..原创 2021-10-13 11:44:50 · 111 阅读 · 0 评论 -
std::thread
C++11中std::thread的使用 - 知乎c++11 std::thread使用总结 - 简书原创 2021-10-09 20:22:29 · 107 阅读 · 0 评论 -
COW,copy-on-write写时复制技术
https://blog.youkuaiyun.com/D_Guco/article/details/79833665原创 2021-08-27 15:04:20 · 158 阅读 · 0 评论 -
可执行程序参数传递
参考资料:https://blog.youkuaiyun.com/bandaoyu/article/details/83312806原创 2021-07-16 10:08:00 · 264 阅读 · 0 评论 -
c++代码格式化
https://blog.youkuaiyun.com/core571/article/details/82867932https://marketplace.visualstudio.com/items?itemName=xaver.clang-format原创 2021-06-24 20:13:34 · 559 阅读 · 2 评论 -
可变参数的传递
https://www.huaweicloud.com/articles/33654c191ad169ee9a7b397f54595961.htmlhttps://my.oschina.net/u/1429862/blog/222903原创 2021-06-24 14:19:06 · 204 阅读 · 0 评论 -
面向对象三大特征五大原则
https://www.cnblogs.com/hnrainll/archive/2012/09/18/2690846.htmlhttps://www.jianshu.com/p/68ab35298a59原创 2021-05-06 19:40:11 · 103 阅读 · 0 评论 -
格式化字符串
itoa虽然好用但不是标准库,推荐使用snprintf。用法:char tmp_arr[100];snprintf(tmp_arr, sizeof(tmp_arr), "%u", 100);原创 2021-02-05 16:46:04 · 162 阅读 · 0 评论 -
范围switch
...与case不接break可以实现范围switch语句参考资料:https://blog.youkuaiyun.com/weixin_44266105/article/details/86134049https://zhidao.baidu.com/question/982180323453204539.htmlhttps://blog.youkuaiyun.com/z_y_ning/article/details/82775339原创 2021-01-27 18:52:18 · 131 阅读 · 0 评论 -
forward完美转发
forward完美转发主要是用来保持转发的语义和之前的一致,看个例子:#include <utility>#include <iostream>void bar(const int& x){ std::cout << "lvalue" << std::endl;}void bar(int&& x){ std::cout << "rvalue" << std::endl;}temp..原创 2020-09-30 20:22:32 · 456 阅读 · 1 评论 -
move移动语义
move移动主要目的是把左值引用转为右值引用,move的一种实现为:template<class T>typename remove_reference<T>::type&& std::move(T&& a) noexcept{ typedef typename remove_reference<T>::type&& RvalRef; return static_cast<RvalRef>(a)...原创 2020-09-30 18:37:20 · 543 阅读 · 0 评论 -
左值引用和右值引用
在右值引用出现之前,一般引用就是指左值引用,也就是如下形式:int a = 2;int &b = a;顾名思义,左值引用就是所引用的变量是一个左值,同理,右值引用所引用的变量就是一个右值了。右值也叫将亡值,例如函数的返回值就是一个右值。借助右值引用可以提高效率。右值引用的用法如下:int a = 1;int && b= a + 1;参考资料:https://zhuanlan.zhihu.com/p/97128024https://blog.cs..原创 2020-09-29 23:17:06 · 319 阅读 · 0 评论 -
非类型模板参数
提到模板首先可能想到是以下这种类型:template<typename T1, typename T2>class Test{...};非类型模板参数和以上形式不一样,属于一个变种:template <typename T, int maxsize = 200> //maxsize这个参数并不是一般形式的类型参数class Stack{public: Stack(); ~Stack(); void push(T t);...原创 2020-08-29 19:19:55 · 145 阅读 · 0 评论 -
STL之容器适配器
标准容器库里面的适配器有三种,分别是stack,queue和priority_queue。适配器没有属于它们自己的数据结构,一般都是使用现有的容器。stack:默认使用deque实现。queue:默认使用deque实现。priority_queue:默认使用deque实现。参考链接:https://blog.youkuaiyun.com/Dxiaoru/article/details/81415377https://blog.youkuaiyun.com/feitianxuxue/article/de.原创 2020-08-28 09:14:42 · 173 阅读 · 0 评论 -
STL之deque
deque是一个双端队列,即可以在头部插入、删除还可以在尾部插入、删除。实现:底层的实现为分块的数组加一个map管理每个块的首地址。参考资料:https://www.jianshu.com/p/51570127ea0dhttps://blog.youkuaiyun.com/qq_37653144/article/details/80053578https://www.cnblogs.com/xiangtingshen/p/11625958.html...原创 2020-08-25 23:53:38 · 120 阅读 · 0 评论 -
多态与虚函数
在类成员函数前面加一个virtual就表示该函数是虚函数,虚函数可以用来实现多态。虚函数会存在虚函数表中,根据指向不同,从而调用基类或子类的函数。例如:class Animal{public: virtual void move() { std::cout << "animal move" << std::endl; } };class Fish : public Animal{public: void move() {...原创 2020-08-23 11:11:45 · 262 阅读 · 0 评论 -
fopen和freopen
经常会遇到文件操作,这时,从文件输入和输出到文件不可少。freopen函数用来重定向输入和输出,不过这个函数有个缺点:只能输入和输出只能定向到一个文件,比如fp1=freopen("data1,in", "r", stdin);fp2=freopen("data2,in", "r", stdin);输入都会变成从data2.in中输入。而fopen函数可以方便实现从几个文件中读取函数,相应原创 2015-04-03 08:38:12 · 2771 阅读 · 0 评论 -
函数模板
函数模板可以给同型函数的实现带来便利性,一个简单的例子如下:template<typename T>void test2078(T x, T y){ cout << x + y << endl;}int main(){ test2078<int>(1,2); //此处的<int>也可以省略,会自动进行类型推导 test2078(1.2, 2.3); return 0;}函数模板还可以结合一些稍...原创 2020-07-08 17:14:57 · 107 阅读 · 0 评论 -
函数对象
重载了()操作符的类对象就称为函数对象,它具有函数调用类似的行为,如下所示:class Test20630{public: void operator()(int a, int b) { if (a > b) cout << "test20630 a>b" << endl; else if (a < b) cout << "test20630 a<...原创 2020-06-30 18:58:52 · 138 阅读 · 0 评论 -
模板的特化
通过特化可以让模板适用一些更加特殊的情况,增强模板的可用性。简单测试代码如下:template<typename T>class Test20629{public: void display(T para) { cout << "para " << para << endl; }};template<>void Test20629<int>::display(int para)...原创 2020-06-29 17:45:11 · 138 阅读 · 0 评论 -
类成员变量的初始化
当一个类拥有一个类成员,会先对类成员进行构造,然后再构造自己。class Test206191{public: Test206191() { cout << "construct 6191" << endl; }};class Test20619{public: Test20619() { cout << "construct 619" << endl; }pr...原创 2020-06-19 20:25:26 · 214 阅读 · 0 评论 -
禁用拷贝构造与赋值运算
设置拷贝构造函数和赋值运算为私有可以禁用掉它们。class TestCopy{public: TestCopy();private: TestCopy(const TestCopy&); const TestCopy &operator=(const TestCopy&);};int main(){ TestCopy...原创 2020-04-19 21:35:22 · 349 阅读 · 0 评论 -
命名空间
为了避免命名重复的问题,引入了命名空间。代码较少时可能体现不出来必要性,但在代码比较多,或者系统比较复杂时,命名空间就变的比较重要了,所以一种比较好的风格是,在函数调用或者对象前面加个命名空间,而不是使用统一的命名空间,比如:#include <iostream>//using namespace std; //不建议在全局范围内使用int main(){ ...原创 2020-04-19 17:45:06 · 159 阅读 · 0 评论 -
function与bind
function是一个可调用对象包装器,可以用来存储函数对象。bind函数允许绑定指定位置的参数,参数个数可以小于函数本身参数个数。bind函数返回的对象可以用function接收,并且可以被其调用。int main(){ auto tmp_fun = add_num; cout << tmp_fun(1,2,3,4) << endl; st...原创 2020-04-19 16:56:36 · 564 阅读 · 0 评论 -
拷贝构造函数
拷贝构造函数的形参必须要是引用,否则会出现无限递归而导致异常:实例化对象->拷贝构造函数->实例化对象->拷贝构造函数...。class Test200107{public: Test200107() {} Test200107(Test200107& t)//必须要为引用 { }};int main(){ Tes...原创 2020-01-07 22:55:16 · 128 阅读 · 0 评论 -
类型转换
一、自定义类型转基本类型如果想把自定义类型转为基本类型,则需要重载类型转换符,否则就会报错,无法完成转换。class TypeTest{public: TypeTest() { int_type = 0; double_type = 0.0; } operator int() const //重载int {...原创 2019-12-17 18:50:16 · 141 阅读 · 0 评论 -
STL之vector
vector容器是最常见的STL容器,是一种顺序容器。常用函数:push_back(...),插入一个元素clear(),清空元素size(),返回元素的个数原创 2019-12-14 19:16:37 · 121 阅读 · 0 评论 -
STL之map
和set容器类似,map容器也属于一种关联容器,底层数据结构也是红黑树,key值有序排列。multimap:数据结构和map类似。unordered_map:key值无序,底层实现为哈希表。unordered_multimap:key值无序但可重复,数据结构和unordered_map一致。常用函数:insert(...),插入数据find(...),查找数据count...原创 2019-12-14 15:26:56 · 188 阅读 · 0 评论 -
STL之set
set容器中元素是有序且唯一的,它的底层数据结构是红黑树(把STL和数据结构联系在一起),属于一种关联容器。multiset:元素可重复且有序底层数据结构和set一致,为红黑树。unordered_set:元素无序,底层数据结构为哈希表。unordered_multiset:元素无序且可重复,底层数据结构和unordered_set一致,为哈希表。常用函数:insert(......原创 2019-12-14 10:46:54 · 150 阅读 · 0 评论 -
智能指针
c++难点之一就是要比较关注内存管理的问题,比如内存如果不及时释放就会造成内存泄漏。智能指针出现之前,程序员都是通过手动释放已经申请的堆内存,有时候比较容易忘记,也有可能就是程序执行异常了,导致释放内存的代码没有执行,例如以下代码就需要自己手动释放内存。class Test1206{public: Test1206(const char *str) { in...原创 2019-12-06 12:44:57 · 364 阅读 · 0 评论 -
RAII
RAII以前很少听说,最近在学习一个课程,里面有提到这个。经过了解,发现RAII真的挺重要的,C++很多场合借助于这个RAII对资源进行管理,比如智能指针。参考资料:https://mp.youkuaiyun.com/postedit...原创 2019-12-05 20:37:26 · 140 阅读 · 0 评论 -
友元
前几天和朋友聊天,朋友提到他们项目组对服务器端代码进行了重构,使用ECS架构。这种基于组件开发的架构思想来源于组合优于继承原则。一个组件里面包含数据,但是没有方法,那么怎么访问到组件里面的数据呢?一种方法就是使用友元。一直以来对友元的实践较少,只了解一些基本概念,以为它的用处较少。此次听说ECS模式中涉及到了友元的概念,觉得友元还是一个比较重要的语法,于是就去深入学习了一下友元。友元分为友元类和友...原创 2019-12-05 14:58:23 · 152 阅读 · 0 评论 -
相互引用,类前置声明
在书写C++代码的过程当中,人们有时会用到一个叫类前置声明的东西。那么使用这个类前置声明对于程序员来讲有什么好处呢,我们什么时候可以利用这个类前置声明呢?下面就用一个具体的例子来解释类前置声明的用法。 假设我们在一个叫OtherClass.h的文件中定义了一些类,其代码如下所示:#ifndefOTHER_TEST_H#defineOTHER_T原创 2013-11-11 22:22:15 · 595 阅读 · 0 评论 -
常见问题时间复杂度(1)
for (i=0;ifor(j=0;jfor(k=0;k;(1~n)Σ(1~i)Σ(1~j)Σ1 = (n^3-n)6原创 2015-11-10 22:06:20 · 619 阅读 · 0 评论 -
函数
(1)int LoadPanel (int parentPanelHandle, char filename[], int panelResourceID);功能把面板加载到内存。参数parentPanelHandle 为0时表示顶层面板。不为0时,为parentPanelHandle的子面板。filename 所要加载的面板的文件名。panelResourceID 面板原创 2013-09-05 20:38:23 · 1017 阅读 · 0 评论