2020春招字节跳动二面
Posted hang-shao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2020春招字节跳动二面相关的知识,希望对你有一定的参考价值。
1. new和malloc的区别
2. c++11新特性
编程实现shared_ptr;
3.模板实例化和特化
-
实例化:通过用具体值代替模板中的参数,从而产生普通类,函数或者成员函数的过程。
隐式实例化:Add(a,c),a的类型是int,c的类型是int。
显式实例化:Add
(a,c) -
特化:
-
函数的模板特化
使用模板时会遇到一些特殊的类型需要特殊处理,不能直接使用当前的模板函数,所以此时我们就需要对该类型特化出一个模板函数(就是写出一个模板函数专门给该类型使用)。
注意:
使用模板特化时,必须要先有基础的模板函数(就是上面第一个模板函数)
使用特换模板函数时格式有要求:
- template 后直接跟<> 里面不用写类型
- 函数名<特化类型>(特化类型 参数1, 特化类型 参数2 , …) 在函数名后跟<>其中写要特化的类型
- 特化的函数的函数名,参数列表要和原基础的模板函数想相同,避免不必要的错误
template<> // 此处不添加类型模板,直接使用空即可 bool Isequal<char*>(char*& p1, char*& p2){ return strcmp(p1, p2) == 0; }
-
类模板特化
-
全特化:
template <class T1, class T2> class Test{ } //全特化 template <> //此处同函数模板的特化一样不用写内容 class Test<int , char>{ }
-
偏特化:(迭代器萃取技术)
-
部分特化:
template <class T1, class T2> class Test2{ } //部分特化 template <class T1> //此处只需写未进行特化的模板类型,特化过的就不用写 class Test2<T1 , char>{//第二个参数类型,只接受char类型,第一个类型不变 }
-
限制模板类型:
template <class T1, class T2> class Test2{ } //对模板类型的范围做出一定的限制 template <class T1 , class T2 > //此处只需写未进行特化的模板类型 class Test2<T1* , T2*>{//只接受T1和T2类型的指针 }
-
-
-
-
优先选择:有特殊到一般,当一个调用一个模板类,首先,找显式实例化的,如果不匹配;接着,找特化的,然后,找偏特化的,最后,根据模板隐式实例化 。对于模板函数,先找参数完全匹配的普通函数(非由模板实例化得到的函数)。再找参数完全匹配的模板函数。再找实参经过自动类型转换后能够匹配的普通函数。
如果上面的都找不到,则报错。
-
模板参数:
4. 动态绑定和静态绑定
动态绑定发生在运行时,静态绑定发生在编译时。
class B
{
void DoSomething();
virtual void vfun();
}
class D : public B
{
void DoSomething();
virtual void vfun();
}
D* pD = new D();
B* pB = pD;
//静态绑定
pB -> DoSomething();
pD -> DoSomething();
//动态绑定
pB->vfun();
pD->vfun();
以上是关于2020春招字节跳动二面的主要内容,如果未能解决你的问题,请参考以下文章