当前位置: 首页 > news >正文

C++虚函数的默认参数是静态绑定还是动态绑定

C++虚函数的默认参数是静态绑定还是动态绑定

或者问:是在编译阶段确定的还是在运行阶段确定的

答案是:编译阶段,也就是静态绑定的


#include <iostream>class Base
{
public:virtual void func(int x = 10) {std::cout << "Base::func(" << x << ")" << std::endl;}
};class Derived : public Base
{
public:void func(int x = 20) override {std::cout << "Derived::func(" << x << ")" << std::endl;}
};int main() 
{Base* ptr; // 指向基类的指针Derived obj;ptr = &obj; // 指向派生类的对象// 调用虚函数 func  产生多态ptr->func(); //10obj.func();//20   无多态return 0;
}

在这里插入图片描述
首先在函数调用之前会先把参数入栈,然后才会找要调用的函数入口地址;
所以当编译器根据类型进行编译时,它会去对应类型的类里面找函数,找默认参数,然后入栈,
ptr->func() ; ptr在编译时编译器认为时Base 类型,所以就去Base里拿默认参数,这里不牵涉到虚函数表指针vfptr和虚函数表vftable,因为参数没有多态性,而函数才有多态;多态产生的一个必要条件就是:基类指针或引用指向了一个派生类对象。


http://www.mrgr.cn/news/53997.html

相关文章:

  • python+大数据+基于热门视频的数据分析研究【内含源码+文档+部署教程】
  • 极氪汽车困局:营销频繁车、产品力不足
  • nbsaas vue3管理后台框架
  • Next-Token Prediction is All You Need 智源发布原生多模态大模型Emu3
  • Java后端面试题:MySQL篇
  • 117. 填充每个节点的下一个右侧节点指针 II【 力扣(LeetCode) 】
  • CTFHUB技能树之XSS——DOM反射
  • 从零开始学PHP之helloworld
  • 练习题 - Scrapy爬虫框架 Spider Middleware 爬虫页中间件
  • scrapy案例——链家租房数据的爬取
  • 外部存储器与内部存储器有哪些主要区别
  • [项目详解][boost搜索引擎#1] 概述 | 去标签 | 数据清洗 | scp
  • 【Trick】在vscode上配置copilot时,输出端出现Invalid copilot token: missing token: 403
  • 摩擦转矩摩擦特性曲线测量(详细算法逻辑框图+SCL源代码)
  • 【Mysql】-锁,行级锁
  • 周末总结(2024/10/19)
  • 3.1.1 内核对用户空间的管理2,搜索目标地址所在的节点
  • 【英特尔IA-32架构软件开发者开发手册第3卷:系统编程指南】2001年版翻译,1-10
  • Scrapy | 通过模拟登录功能认识cookies参数及start_requests函数实现发送POST请求
  • Flux.from 使用说明书
  • 功能安全实战系列-软件FEMA分析与组件鉴定
  • 【C语言教程】【嵌入式编程】(一)介绍与前提条件(二)嵌入式编程基础(三)硬件基础知识(四)硬件寄存器操作
  • Linux下进行用户的切换与创建以及细微设置
  • 中华传承-医山命相卜-四柱八字
  • 基于STM32的智能交通灯控制系统设计与实现思路:LoRa、控制算法结合
  • stablediffusion 关于fp32、fp16和fp8是什么 分别有什么区别