This commit is contained in:
gcxzhang 2020-05-31 08:00:35 +08:00
parent 1d3f1aa822
commit d9dbf6f32f
3 changed files with 3 additions and 3 deletions

View File

@ -10,7 +10,7 @@
在C++中常在头文件见到extern "C"修饰函数,那有什么作用呢? 是用于C++链接在C语言模块中定义的函数。
C++虽然兼容C但C++文件中函数编译后生成的符号与C语言生成的不同。因为C++支持函数重载C++函数编译后生成的符带有函数参数类型的信息而C则没有。
C++虽然兼容C但C++文件中函数编译后生成的符号与C语言生成的不同。因为C++支持函数重载C++函数编译后生成的符带有函数参数类型的信息而C则没有。
例如`int add(int a, int b)`函数经过C++编译器生成.o文件后`add`会变成形如`add_int_int`之类的, 而C的话则会是形如`_add`, 就是说相同的函数在C和C++中,编译后生成的符号不同。

View File

@ -169,6 +169,6 @@ End of assembler dump.
## 3.总结
C++中引入了引用操作,在对引用的使用加了更多限制条件的情况下,保证了引用使用的安全性和便捷性,还可以保持代码的优雅性。在适合的情况使用适合的操作,引用的使用可以一定程度避免“指针满天飞”的情况,对于提升程序鲁棒性也有一定的积极意义。最后,指针与引用底层实现都是一样的,不用担心两者的性能差距。
C++中引入了引用操作,在对引用的使用加了更多限制条件的情况下,保证了引用使用的安全性和便捷性,还可以保持代码的优雅性。在适合的情况使用适合的操作,引用的使用可以一定程度避免“指针满天飞”的情况,对于提升程序稳定性也有一定的积极意义。最后,指针与引用底层实现都是一样的,不用担心两者的性能差距。
上述部分参考自:<http://irootlee.com/juicer_pointer_reference/#>

View File

@ -12,7 +12,7 @@
为了实现虚函数C ++使用一种称为虚拟表的特殊形式的后期绑定。该虚拟表是用于解决在动态/后期绑定方式的函数调用函数的查找表。虚拟表有时会使用其他名称例如“vtable”“虚函数表”“虚方法表”或“调度表”。
虚拟表实际上非常简单,虽然用文字描述有点复杂。首先,**每个使用虚函数的类(或者从使用虚函数的类派生)都有自己的虚拟表**。该表只是编译器在编译时设置的静态数组。虚拟表包含可由类的对象调用的每个虚函数的一个条目。此表中的每个条目只是一个函数指针,指向该类可访问的派生函数。
虚拟表实际上非常简单,虽然用文字描述有点复杂。首先,**每个使用虚函数的类(或者从使用虚函数的类派生)都有自己的虚拟表**。该表只是编译器在编译时设置的静态数组。虚拟表包含可由类的对象调用的每个虚函数的一个条目。此表中的每个条目只是一个函数指针,指向该类可访问的派生函数。
其次编译器还会添加一个隐藏指向基类的指针我们称之为vptr。vptr在创建类实例时自动设置以便指向该类的虚拟表。与this指针不同this指针实际上是编译器用来解析自引用的函数参数vptr是一个真正的指针。