C++小笔记——function绑定重载函数、私有继承用的条件
发布日期:2021-05-07 16:07:30 浏览次数:10 分类:精选文章

本文共 1371 字,大约阅读时间需要 4 分钟。

包扩展下的sizeof

在C++中,`sizeof`后面紧跟...表示包中有多少个参数。这是对包的参数数量进行查询,常用于函数的参数处理中。例如:

template
void fun(Args ...args){ cout << sizeof...(Args) << endl;}

move为什么快?

移动操作符(move)的优势在于它避免了复制操作,直接"偷"用指针所指的内存。这与复制操作不同,复制会创建新的内存空间存储数据。而move操作通过转移指针的指向,减少了内存的使用和时间的消耗。

inline的虚函数

在C++中,内联优化(inline)对于虚函数(virtual)来说存在一个限制:如果一个类继承自另一个类并重定义了虚函数,虚函数就不能被内联优化。因为内联需要在编译时明确调用者的情况,而虚函数的调用者在运行时才确定。

function、bind绑定重载函数

在处理函数重载和动态绑定时,尤其是使用`std::function`时,可能会遇到类型不明确的情况。此时,可以通过使用指针和占位符来明确函数的类型。例如:

int fun(int, int&);void fun();using pf_void = void(*)();using pf_int = int(*)(int, int&);int main(){ function
f = std::bind((pf_int)fun, std::placeholders::_1, std::placeholders::_2); return 0;}

类中重载函数

在类中重载函数时,需要注意作用域的名称遮盖规则。例如,在子类中没有声明的父类重载函数会被隐藏,导致调用时出现错误。要解决这个问题,可以使用`using`语句明确继承父类的重载函数,或者使用转交函数来指定需要调用的函数版本。

函数重载的实现原理

函数重载的实现依赖于编译器的函数信息表。在编译时,编译器会根据函数的名字和参数类型生成不同的函数符号,使得在同一个名称下有多个函数可以被区分开。调用时,编译器根据参数的类型选择合适的函数来执行,从而实现函数的重载。

不要重新定义虚函数的缺省参数值

在定义虚函数时,缺省参数值是一个静态绑定的属性,一旦定义就无法更改。如果子类重新定义了缺省参数值,但默认值仍然是父类的,这会导致错误。因此,建议不要重新定义缺省参数值,或者在定义时明确指定新的缺省值。

私有继承的条件

私有继承适用于不想将类接口暴露给使用者的场景。在这种情况下,私有继承比使用空类或组合更合适。私有继承还可以用来控制类中的虚函数和protected成员的访问权限。例如,使用私有继承可以确保子类的额外功能不会对外部造成影响。

委托构造函数

在C++中,委托构造函数用于将初始化列表中的参数转移给子构造函数。在初始化列表中只能进行类型检查和大小判断,真正的赋值操作必须在函数体内完成。例如:

class Test{public: Test(int a1, int a2) : a1_(a1), a2_(a2){} Test(int a1, int a2, int a3) : Test(a1, a2){ a3_ = a3;}}int a1_ = 0;int a2_ = 0;int a3_ = 0;
上一篇:C++实现一颗前缀树
下一篇:内联函数为什么会快?体积为什么会变大?

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年03月24日 12时27分25秒