C++高频知识点(八)

36. 函数调用类型_cedecl,_stdcall,_fastcall

在这里插入图片描述
函数调用约定详解
函数调用约定决定了函数调用过程中参数传递返回值处理的方式。

在这里插入图片描述
使用场景:

  • 编写库函数时使用,保证库的跨平台兼容性。
  • 需要显式控制函数调用堆栈的清理过程。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

37. char * const p ,char const * p, char const * const p区别

在这里插入图片描述

char * const p

指针常量(Constant Pointer)
指针常量是指指针本身是常量,意味着你不能改变这个指针指向的地址,但可以修改它指向的内容。

  • 定义:p 是一个指针常量,指向一个字符类型变量。
  • 含义:指针 p 本身是常量,不能改变它的指向。但是,通过指针 p 可以修改它所指向的字符的值
char c1 = 'A';
char c2 = 'B';
char * const p = &c1; // p 是一个常量指针,指向 c1

*p = 'Z'; // 合法,修改 c1 的值
// p = &c2; // 非法,不能改变 p 的指向

char const * p 或 const char * p

常量指针是指指针所指向的内容是常量,意味着你不能通过指针修改所指向的值,但可以改变指针本身指向的位置。
在这里插入图片描述

char c1 = 'A';
char c2 = 'B';
const char * p = &c1; // p 是一个指向常量字符的指针

// *p = 'Z'; // 非法,不能修改所指向的字符的值
p = &c2; // 合法,改变 p 的指向

char const * const p 或 const char * const p

在这里插入图片描述

char c1 = 'A';
char c2 = 'B';
const char * const p = &c1; // p 是一个常量指针,指向一个常量字符

// *p = 'Z'; // 非法,不能修改所指向的字符的值
// p = &c2; // 非法,不能改变 p 的指向

38. 为什么C++访问虚函数比访问普通函数慢

虚函数和普通函数的区别

  • 普通函数调用:编译时已经确定了具体调用哪个函数,直接通过函数地址进行调用。
  • 虚函数调用:运行时才确定具体调用哪个函数,通过虚函数表(vtable)进行间接调用。

虚函数调用的机制

在这里插入图片描述

普通函数调用的机制

普通函数调用则是通过直接调用函数地址完成的。编译时已经确定了函数的地址,生成的代码可以直接跳转到该地址执行函数。

在这里插入图片描述
在这里插入图片描述

39. 为什么需要纯虚函数?

纯虚函数在C++中用于定义抽象类,它们提供了一种机制来指定必须在派生类中实现的函数接口。这对于设计面向对象的系统特别有用。

什么是纯虚函数

纯虚函数是没有具体实现的虚函数,在基类中声明,但在派生类中必须被实现。它的语法是在函数声明末尾加上 = 0。

class Base {
public:
    virtual void pureVirtualFunction() = 0; // 纯虚函数
};

为什么需要纯虚函数

在这里插入图片描述
在这里插入图片描述

40. 迭代器和普通指针有什么区别?

迭代器和普通指针都是用于遍历数据结构的工具,但它们在功能和使用场景上有许多不同之处。

迭代器 (Iterator)

在这里插入图片描述

#include <vector>
#include <iostream>

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};
    for (std::vector<int>::iterator it = vec.begin(); it != vec.end(); ++it) {
        std::cout << *it << " ";
    }
    return 0;
}

普通指针 (Pointer)

在这里插入图片描述

迭代器与指针的主要区别

在这里插入图片描述
在这里插入图片描述

之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值