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

C++(15):默认值(default)

目录

二、应用场景

1. 函数参数的默认值

代码示例

2. 构造函数的默认参数

代码示例

3. 变量的默认初始化

代码示例

四、默认值的优势

五、注意事项


一、核心概念

        默认值 是为函数参数或变量预先设定的默认值。当调用者未显式提供数据时,程序自动使用该默认值,确保程序的确定性健壮性

        必须在函数声明中声明默认参数!

        函数声明就是函数的身份证,外部调用方不看定义只看声明。

int test(int n,int m = 1);

二、应用场景

1. 函数参数的默认值

        在函数声明中为参数指定默认值,调用时可选择性省略参数。

代码示例
#include <iostream>// 参数 b 和 prefix 有默认值
void printMessage(const std::string& message, bool addNewline = true,         // 默认换行const std::string& prefix = "") // 默认无前缀
{std::cout << prefix << message;if (addNewline) std::cout << "\n";
}int main() {printMessage("Hello");                // 输出: Hello(换行)printMessage("World", false);         // 输出: World(不换行)printMessage("C++", true, ">> ");     // 输出: >> C++(换行)return 0;
}

关键规则

  • 默认参数必须从右到左连续设置,不能左侧有默认值而右侧没有。

  • 默认值通常在函数声明中指定(头文件),而非函数定义。

  • 没传实参 ->用默认值;传了实参 ->用传进来的。

int test(int n,int m = 1);int test(int n, int m){int ans = 1;for(int i = 0;i < m; i++){ans *= n;}return ans;
}int main(){cout<< power(5);//没传实参 ->用默认值,m=1cout <<power(4,3);//传了实参 ->用传进来的,m=3
}

2. 构造函数的默认参数

        为类的构造函数参数设置默认值,允许灵活初始化对象。

代码示例
#include <iostream>class Rectangle {
public:// 构造函数:width 和 height 有默认值Rectangle(int w = 10, int h = 5) : width(w), height(h) {}void printArea() {std::cout << "Area: " << width * height << "\n";}private:int width, height;
};int main() {Rectangle rect1;        // 使用默认值 width=10, height=5rect1.printArea();      // 输出: Area: 50Rectangle rect2(20);    // width=20, height=5(默认)rect2.printArea();      // 输出: Area: 100Rectangle rect3(15, 3); // width=15, height=3rect3.printArea();      // 输出: Area: 45return 0;
}

3. 变量的默认初始化

        在变量声明时直接赋予默认值(C++11 起支持类成员直接初始化)。

代码示例
class Config {
public:int maxConnections = 100;   // 类成员默认值std::string logPath = "/var/log/app.log";
};int main() {Config config;std::cout << config.maxConnections;  // 输出 100return 0;
}

四、默认值的优势

优点说明
简化调用调用者无需传递所有参数,降低使用复杂度。
代码灵活性兼容新旧代码(新增参数可为旧代码提供默认值)。
防止未定义行为避免因参数缺失导致程序行为不确定(如未初始化的变量)。

五、注意事项

  1. 默认参数顺序
    默认值必须放在右边,必须从右到左连续设置,以下为错误示例:

    void func(int a = 1, int b); // 错误!左侧有默认值,右侧未设置
  2. 避免头文件与实现文件冲突
    默认值应在函数声明(头文件)中指定,而非实现文件:

    // 头文件(正确)
    void logError(const std::string& msg, int severity = 1);// 实现文件(错误!重复指定默认值)
    void logError(const std::string& msg, int severity = 1) { /*...*/ }
  3. 谨慎使用默认值
    过度使用可能导致代码可读性下降(需明确何时覆盖默认值)。

相关文章:

  • UI自动化测试详解
  • 开源鸿蒙北向源码开发: 5.0kit化相关sdk编译
  • 【Win32 API】 lstrcpyA()
  • 中国 MRO 的市场概况及发展趋势
  • vscode debug node + 前端
  • Wise Disk Cleaner:免费系统清理工具,释放空间,提升性能
  • matlab建立整车模型,求汽车的平顺性
  • 【PmHub后端篇】PmHub 中缓存与数据库一致性的实现方案及分析
  • llamafactory SFT 从断点恢复训练
  • 联合查询
  • 华为网路设备学习-22(路由器OSPF-LSA及特殊详解)
  • 硬件中的OID是什么?SNMP如何通过OID获取信息?——用“图书馆”比喻彻底讲清底层原理-优雅草卓伊凡|小无
  • Stratix 10 FPGA DDR4 选型
  • 轨迹误差评估完整流程总结(使用 evo 工具)
  • 人工智能-状态空间-猴子摘香蕉
  • 【蓝桥杯省赛真题50】python字母比较 第十五届蓝桥杯青少组Python编程省赛真题解析
  • 【Qt】PyQt5 为什么Qt中的字体显示会模糊或呈现像素化
  • 排序01:多目标模型
  • Redisson 四大核心机制实现原理详解
  • 多模块,依赖android.car.jar后,能调用接口但是没有回调的问题
  • 沃尔玛上财季净利下滑12%:关税带来成本压力,新财季价格涨幅将高于去年
  • 中国恒大披露清盘进展:要求债权人提交债权证明表
  • 丹麦外交大臣拉斯穆森将访华
  • 透视社会组织创新实践中的花开岭现象:与乡村发展的融合共进
  • 秘鲁总统任命前司法部长阿拉纳为新总理
  • 前四个月社会融资规模增量累计为16.34万亿元,比上年同期多3.61万亿元