自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(9)
  • 问答 (1)
  • 收藏
  • 关注

原创 C++基础之类型转换(各种cast)

如果是将变量转换为它本身的类型或者将定义为子类的变量转换为父类,永远是成功的。如果将定义为父类的变量转换为子类,则需要父类中定义了虚函数(实现了多态,这时需要通过类中的虚函数表指针查询虚表中的type info来确定实际实例化的类型)并且实例化的是子类的子类或者本身(换句话说,这时候必须能从变量中抽取出一个被转换成的类型的实例)。主要用于看上去没那么有逻辑的类型转换,比如整数和指针之间的转换和各种不同类型的指针之间相互转换,函数指针也可以和其他类型的指针或整数相互转换,但不保证这些转换后的变量能正确使用。

2024-11-12 22:11:11 401

原创 C++基础之forward

3 当定义T makeClass(Args&&... args),调用test1 m = makeClass<test1>(10, 2)时,Args被推导为int,相当于定义test1 makeClass(int&&, int&&),相当于按值传递创建了临时变量int&& tmp1= 10,tmp2 = 2然后调用test1(tmp1, tmp2),虽然传入makeClass的是右值,但通过临时变量复制,最终传入test1构造函数的是左值;原因在于C++模板参数推导规则,以下例子来自。

2024-11-01 19:37:09 1054

原创 C++基础之可变参数函数

第一个参数必须类型确定且不能为引用。通过va_start来确定第一个变参的地址,通过这个地址和参数类型再依次确认接下来的变参的地址,由此得到它们的值。因此参数似乎只能按值传递而不能按引用传递(参数必须在内存中连续),而且必须有办法知道每个参数的类型。C++中提供了可变参数模板来实现类似的功能,通过递归依次匹配和处理第一个参数,可以按引用传递参数,而且不必须知道每个参数的类型(不过从应用角度很多时候还是需要知道的类型的)。

2024-10-26 14:54:28 180

原创 C++基础之类模板之杂七杂八

来自《C++ Primer Plus》:#include <iostream>using namespace std;//在模板类中定义模板类和模板函数template <typename T>class test1 { template <typename U> class nested; nested<T> a;public: test1(T x):a(x) {} template<typen

2024-10-22 17:39:09 110

原创 C++基础之模板类以及如何为指针和非指针定义不同的模板类实现

C++中的模板类和模板函数一样也有实例化和具体化的概念,除了完全具体化,模板类还可以部分具体化(partial specialization),即为部分模板参数指定具体的类型。

2024-10-22 15:06:25 183

原创 C++基础之函数模板以及为什么需要显式具体化

显式具体化可以为某种类型的参数定义不同于通用模板的实现,匹配时显式实例化的模板优先于通用模板。那为什么还需要显式具体化呢?当然这个例子不太具有代表性...理解意思即可。

2024-10-20 20:49:15 167

原创 c++ stl中的emplace_back和push_back

由此可见,当创建类型为vector的vector且插入类型为T的元素时,push_back和emplace_back并无区别,都是根据参数的类型调用复制/移动构造函数并插入。emplace_back的作用在于当存在T(a, b, c...)的构造函数时,可以直接传入a, b, c...,这样比起push_back可以少调用一次构造函数。

2024-10-18 19:06:11 288

原创 爬取知乎一个问题下所有图片

代码如下:import requestsimport reimport http.cookiejarsession=requests.session()questionurl='https://www.zhihu.com/question/25699277'agent=r'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/

2018-01-13 13:18:25 2214

原创 memset的一个错误用法

int *d = new int[10];memset(d, 0, sizeof(d)); //wrongint d[10];memset(d, 0, sizeof(d)); //right

2017-09-24 20:42:31 277

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除