C++中的默认函数学习

今天在学习QT别人的项目时看到有个函数在声明和调用时参数个数不一样,查了下是c++中的一种函数类型,这个类型的函数可以让代码更简洁、灵活。

  • 定义:在函数声明时,给某些参数预先设定一个默认值。调用函数时,如果省略这些参数,编译器会自动使用默认值。

  • 调用规则:从第一个默认参数开始,后续参数都可以省略(必须从左到右连续省略,不能跳过中间参数),默认参数放在函数声明(头文件)中

    规则1:默认参数必须从右向左设置
    // ✅ 正确:默认参数在右侧
    void func(int a, int b = 10, int c = 20);// ❌ 错误:中间参数不能跳过
    void func(int a = 10, int b, int c);
    
    规则2:默认参数在声明中设置(头文件)

    通常放在函数声明(头文件)中,而非定义(源文件):

    // header.h
    void printMessage(string msg, int times = 1);// source.cpp
    void printMessage(string msg, int times) {for (int i = 0; i < times; i++) cout << msg << endl;
    }
    
    ⚠️ 注意:默认参数只能设置一次

    避免在声明和定义中重复设置:

    // ❌ 错误:重复设置默认值
    // header.h
    void foo(int x = 10);// source.cpp
    void foo(int x = 10) { ... }  // 这里不能再写默认值!
    

代码示例


#include <iostream>
using namespace std;// 声明函数时设置默认参数(半糖)
void orderMilkTea(string teaType, int sugarLevel = 50) {cout << "奶茶类型:" << teaType << ",甜度:" << sugarLevel << "%" << endl;
}int main() {orderMilkTea("珍珠奶茶");       // 不传甜度,默认50%orderMilkTea("乌龙奶茶", 30);   // 传甜度30%return 0;
}

输出

奶茶类型:珍珠奶茶,甜度:50%
奶茶类型:乌龙奶茶,甜度:30%

编译器在调用时会自动补全省略的参数。

使用默认参数的作用


  1. 减少重载函数

    不用为了不同参数组合写多个重载函数。

    // 不用写两个函数:
    // void drinkTea(string type);
    // void drinkTea(string type, int sugar);
    
  2. 提高可读性

    调用时只需关注需要修改的参数。

  3. 兼容旧代码

    给已有函数添加新参数时,旧代码无需修改。

QT中这样设计的好处

  1. 语法支持:C++标准允许函数参数设置默认值
  2. 实用需求:GUI操作中大多数参数通常不需要特殊设置
  3. API友好:降低简单场景的使用复杂度,同时保留高级功能

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/92333.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/92333.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HBase分片技术实现

HBase分片技术实现概述HBase是基于Hadoop的分布式、可扩展的NoSQL数据库&#xff0c;采用列族存储模型。HBase的分片机制通过Region自动分割和负载均衡实现水平扩展&#xff0c;支持PB级数据存储和高并发访问。HBase架构核心组件HMaster: 集群管理节点&#xff0c;负责Region分…

Python爬虫实战:研究awesome-python工具,构建技术资源采集系统

1. 引言 1.1 研究背景 Python 凭借语法简洁、生态丰富等特点,已成为全球最受欢迎的编程语言之一。截至 2024 年,PyPI(Python Package Index)上的第三方库数量已突破 45 万个,涵盖从基础工具到前沿技术的全领域需求。然而,海量资源也带来了 "信息过载" 问题 —…

【实时Linux实战系列】实时视频监控系统的开发

随着技术的不断发展&#xff0c;实时视频监控系统在安防、交通管理、工业自动化等领域得到了广泛应用。实时Linux系统因其高效的实时性和稳定性&#xff0c;成为开发高性能视频监控系统的理想选择。掌握基于实时Linux的视频监控系统开发技能&#xff0c;对于开发者来说不仅能够…

力扣-11.盛最多水的容器

题目链接 11.盛最多水的容器 class Solution {public int maxArea(int[] height) {int res 0;for (int i 0, j height.length - 1; i < j; ) {res Math.max(res, Math.min(height[i], height[j]) * (j - i));if (height[i] < height[j]) {i;} else {j--;}}return r…

大型音频语言模型论文总结

大型音频语言模型&#xff08;Large Audio Language Model, LALM&#xff09;是一类基于深度学习的智能系统&#xff0c;专门针对音频信号&#xff08;如语音、音乐、环境声等&#xff09;进行理解、生成、转换和推理。它借鉴了大型语言模型&#xff08;LLM&#xff09;的“预训…

如何解决网页视频课程进度条禁止拖动?

function skip() {let video document.getElementsByTagName(video)for (let i0; i<video.length; i) {video[i].currentTime video[i].duration} } setInterval(skip,6666)无法拖动视频进度。 使用F12启动调试模式。 function skip() {let video document.getElements…

基于deepSeek的流式数据自动化规则清洗案例【数据治理领域AI带来的改变】

随着AI大模型的大量普及&#xff0c;对于传统代码模式产生了不小的影响&#xff0c;特别是对于大数据领域&#xff0c;传统的规则引擎驱动的数据治理已经无法满足数据增长带来的治理需求。因此主动型治理手段逐渐成为主流&#xff0c;因此本文介绍一个基于deepSeek的流式数据自…

【论文分析】【Agent】SEW: Self-Evolving Agentic Workflows for Automated Code Generatio

1.论文信息标题&#xff1a;SEW: Self-Evolving Agentic Workflows for Automated Code Generatio&#xff1a;用于自动代码生成的自我进化的代理工作流程收录的会议/期刊&#xff1a;作者信息&#xff1a;arxiv&#xff1a;&#x1f517;github网站&#xff1a;&#x1f517;g…

MCP 协议:AI 时代的 “万能转接头”,从 “手动粘贴” 到 “万能接口”:MCP 协议如何重构 AI 工具调用规则?

注&#xff1a;此文章内容均节选自充电了么创始人&#xff0c;CEO兼CTO陈敬雷老师的新书《GPT多模态大模型与AI Agent智能体》&#xff08;跟我一起学人工智能&#xff09;【陈敬雷编著】【清华大学出版社】 清华《GPT多模态大模型与AI Agent智能体》书籍配套视频课程【陈敬雷…

VUE本地构建生产环境版本用于局域网访问

&#x1f680;构建生产环境版本用于局域网访问&#xff08;适用于 Vue 项目&#xff09; 在开发 Vue 项目的过程中&#xff0c;很多人使用 yarn serve 启动开发服务器进行调试。但开发模式存在以下问题&#xff1a; 访问速度慢&#xff0c;特别是局域网访问&#xff1b;热更新频…

【密码学】5. 公钥密码

这里写自定义目录标题公钥密码密码学中的常用数学知识群、环、域素数和互素数模运算模指数运算费尔马定理、欧拉定理、卡米歇尔定理素性检验欧几里得算法中国剩余定理&#xff08;CRT&#xff09;离散对数二次剩余循环群循环群的选取双线性映射计算复杂性公钥密码体制的基本概念…

VINS-Fusion+UWB辅助算法高精度实现

VINS-FusionUWB辅助算法高精度实现 摘要 本文详细介绍了基于VINS-Fusion框架结合UWB辅助的高精度定位算法实现。通过将视觉惯性里程计(VIO)与超宽带(UWB)测距技术融合&#xff0c;显著提高了复杂环境下的定位精度和鲁棒性。本文首先分析了VINS-Fusion和UWB各自的技术特点&#…

新手向:Python实现简易计算器

你是否一直想学习编程但不知从何入手&#xff1f;这篇详细的教程将带领完全零基础的读者&#xff0c;循序渐进地掌握如何用Python实现一个简易计算器。我们将从最基本的编程概念讲起&#xff0c;确保每一位初学者都能跟上进度。准备工作在开始之前&#xff0c;你需要&#xff1…

区块链赋能供应链金融:解决信任与效率问题

摘要: 随着全球经济一体化和数字化进程的加速,供应链金融在实体经济发展中的作用愈发关键。然而,传统供应链金融面临着信任机制薄弱和效率低下等诸多挑战。区块链技术凭借其去中心化、不可篡改、可追溯等特性,为供应链金融带来了创新的解决方案,能够有效解决信任与效率问题…

无人机 × 巡检 × AI识别:一套可复制的超低延迟低空视频感知系统搭建实践

✳️ 引言&#xff1a;低空感知&#xff0c;正重构数字世界的“底层感官接口” 随着低空经济进入规模化部署阶段&#xff0c;感知系统不再是“任务辅助”&#xff0c;而是演变为支撑智能化运行的基础设施核心模块。从电力巡检的高空细节识别&#xff0c;到城市安防的区域态势掌…

STM32U5 外部中断不响应问题分析

关键字&#xff1a; EXTI 1. 问题背景 客户的终端客户反馈产品会有偶发性的功能异常。问题比较难以复现。 经过调查&#xff0c;在 BOOT 程序跳转到 APP1 程序中时相对比较容易复现问题。查看客户代码&#xff0c;发现客户在 BOOT 程序中会对 EXTI 进行初始化&#xff0c;跳…

17.Linux :selinux

Linux &#xff1a; selinux DAC vs MAC 对比模型控制方式决策依据安全强度DAC自主访问控制文件所有者的权限设置低MAC强制访问控制系统级安全策略极高SELinux的核心原理是基于 强制访问控制&#xff08;MAC&#xff09; 模型&#xff0c;通过为系统资源打上安全标签并制定精细…

如何在不停机的情况下,将MySQL单库的数据迁移到分库分表的架构上?

在业务高速发展的过程中&#xff0c;单库单表的MySQL架构往往会成为系统性能的瓶颈。将单库迁移到分库分表架构是一种常见的扩展方案&#xff0c;但如何在保证业务连续性的前提下完成这一迁移是一个挑战。以下是不停机迁移的几种主要方案&#xff1a; 一、基于双写的迁移方案 1…

Unix/Linux 系统编程中用于管理信号处理行为的核心概念或模型

在 Unix/Linux 系统编程中&#xff0c;管理信号处理行为涉及以下核心概念和模型&#xff0c;它们共同构成了信号处理的框架&#xff1a;1. 信号&#xff08;Signal&#xff09;模型 软件中断&#xff1a;信号是异步事件通知机制&#xff0c;类比硬件中断预定义类型&#xff1a;…

webrtc弱网-OveruseFrameDetector源码分析与算法原理

一、核心功能CPU负载检测&#xff1a;监控视频帧的捕获、编码、发送全流程耗时&#xff0c;实时计算CPU使用率自适应决策&#xff1a;基于CPU使用率阈值触发视频质量调整&#xff08;降级/升级&#xff09;多策略支持&#xff1a;提供新旧两套CPU负载估计算法&#xff0c;支持实…