C++
文章平均质量分 79
caojianfa969
这个作者很懒,什么都没留下…
展开
-
C++全局变量注意事项
一、不要将全局变量定义在头文件 如果将全局变量定义在头文件中,该头文件被其他文件包含会报“找到一个或多个多重定义的”错误。其他文件包含该头文件后相当于都定义了一个全局变量符号。假设有文件file1.h,file1.cpp,如下:// file1.h#pragma onceint aa = 0;class file1{public: file1(); ~file1();};// file1.cpp#include "file1.h"file1::file1()...原创 2021-10-26 10:29:01 · 1644 阅读 · 0 评论 -
使用模板技巧实现Variant
一、函数模板原创 2021-07-24 15:18:44 · 457 阅读 · 0 评论 -
placement new使用
一、new构造过程 在使用new关键词创建一个对象指针时,需要做以下工作:使用operater new分配内存; A *pa = static<A *>(operator new(sizeof(A))); 然后调用类构造函数; pa->A(); 返回内存指针。 return pa;C++提供了默认的operator new函数共用三个版本:operator new(size_t); ...原创 2021-07-23 17:10:48 · 264 阅读 · 0 评论 -
右值引用及其作用
什么是左值、右值?可以出现在=号左边的则为左值,否则为右值。可以出现在=左边,意味着一定能保存数据,存放在内存中,有实际的内存地址,而右值则是一个临时中间存放的数据,是存放在寄存器中的。inta = 9, b = 8;a = 8, b = 0; // a,b为左值// a + 4 = 5; // 错误 a + 4为右值,a + 4为一个临时对象// -a = 4; // 错误 -a为右值,为一个临时对象(a) = 5; ...原创 2021-07-20 17:54:10 · 16452 阅读 · 10 评论 -
std::bind使用注意事项
一、绑定对象会拷贝 使用std::bind绑定对象时,会拷贝新对象,作为内部调用成员函数的对象。那么如果类中有指针且未实现深拷贝,可能会出错。如下:class A{public: A() { pa = new int(9); } ~A() { delete pa; pa = nullptr; } int geta() { return *this->pa; }private: int *pa = nullptr;};...原创 2021-07-20 09:44:56 · 1027 阅读 · 0 评论 -
一步步实现C++11中的std::function和std::bind(下)
一、本文目的 前面两篇分别讲了如何封装自己的function和bind,保存了函数和参数包。还有最后一点与C++11提供的明显差异是没有提供部分参数的保存功能。本文将在前篇基础上介绍如何实现部分参数的保存功能。二、部分参数保存分析 从上一篇我们知道,参数包是可以通过tuple进行保存,在回调时通过对tuple进行展开调用。std::bind可以只绑定部分参数,其他参数可以通过占位符代替,在最后回调的时候传入,替换占位符传给函数进行调用。 显然在bin...原创 2021-07-19 16:39:18 · 472 阅读 · 1 评论 -
一步步实现C++11中的std::function和std::bind(中)
目录一、本文目的二、std::bind如何绑定参数三、参数包如何保存四、tuple展开五、构造索引系列_index_seq_六、通过_index_seq_展开tuple七、binder保存参数一、本文目的 上一篇介绍了std::function和std::bind实现方式,可以保存一般函数和成员函数,但并未实现对参数包的保存。由于参数包的保存也是一个难点,所以将该内容作为一个单独的篇幅进行介绍。通过该篇可以了解参数包的实现原理,同时也能掌握C++模板的实现...原创 2021-07-18 21:36:29 · 448 阅读 · 1 评论 -
一步步实现C++11中的std::function和std::bind(上)
std::function和std::bind是C++11新增特性,可以非常方便实现函数的回调,且非常安全。对于如何使用std::function和std::bind不是本文的重点,本文目的是在于如何自己手动实现std::function和std::bind,只有自己手动实现了才会了解其中的原理,同时实现这两个函数有助于掌握C++模板使用技巧,如模板特例化、偏特例化变参模板等。原创 2021-07-16 18:19:40 · 1858 阅读 · 2 评论