C++ 默认参数与引用传递:语法、用法及示例

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
函数计算FC,每月15万CU 3个月
云原生网关 MSE Higress,422元/月
简介: C++ 允许函数参数具有默认值,简化调用。例如,`void myFunction(string country = "Norway")` 中`country`默认为"Norway"。默认参数仅适用于函数参数,不包括返回值。引用传递是另一种传递方式,函数直接访问变量内存,允许修改原值,提高效率。`void swapNums(int &x, int &y)` 中`x`和`y`为引用参数。了解这些特性可提升代码可读性和性能。

C++ 默认参数

默认参数概述

在 C++ 中,函数参数可以拥有默认值。这意味着,在调用函数时,如果省略了某个参数,那么将使用为该参数指定的默认值。

设置默认参数

默认参数值使用等号 = 符号进行设置,位于参数声明的类型之后。例如:

void myFunction(string country = "Norway");

在这个例子中,country 是一个参数,它的默认值为 "Norway"。这意味着,如果在调用 myFunction 时没有显式指定 country 参数,那么函数将使用 "Norway" 作为其值。

示例:使用默认参数

以下示例展示了如何使用默认参数:

void myFunction(string country = "Norway") {
  cout << country << "\n";
}

int main() {
  myFunction("Sweden");  // 输出:Sweden
  myFunction("India");   // 输出:India
  myFunction();        // 输出:Norway
  myFunction("USA");    // 输出:USA
  return 0;
}

在该示例中,myFunction 函数有两个调用:

  • 第一次调用显式指定了参数 country"Sweden",因此输出 "Sweden"
  • 第二次调用显式指定了参数 country"India",因此输出 "India"
  • 第三次调用没有指定参数 country,因此使用默认值 "Norway",输出 "Norway"
  • 第四次调用显式指定了参数 country"USA",因此输出 "USA"

多个参数和默认参数

函数可以拥有多个参数,其中一部分或全部都可以拥有默认值。例如:

void myFunction(string fname, int age = 18) {
  cout << fname << " Refsnes is " << age << " years old.\n";
}

int main() {
  myFunction("Liam");       // 输出:Liam Refsnes is 18 years old.
  myFunction("Jenny", 25);  // 输出:Jenny Refsnes is 25 years old.
  return 0;
}

在这个例子中,myFunction 函数有两个参数:fnameageage 参数拥有默认值 18,这意味着如果在调用函数时没有显式指定 age 参数,那么将使用 18 作为其值。

函数返回值和默认参数

默认参数仅适用于函数参数,不适用于函数返回值。函数的返回值类型由函数声明中的类型决定,与默认参数无关。

总结

C++ 中的默认参数是一种方便的功能,可以简化函数调用并提高代码的可读性。通过使用默认参数,您可以避免在每次调用函数时都需要显式指定所有参数,尤其是对于那些经常使用相同值的可选参数。

C++ 函数 - 引用传递

引用传递概述

在 C++ 中,函数参数可以使用引用传递的方式进行传递。引用传递是指函数直接访问函数调用者提供的变量的内存地址,而不是复制变量的值。这意味着函数可以直接修改调用者变量的值,而无需创建副本。

引用传递通常用于以下两种情况:

  • 需要在函数中修改调用者变量的值
  • 需要在函数中传递大型数据结构,例如数组或对象,以避免复制数据的开销

引用传递语法

引用传递的参数声明与普通参数声明类似,但需要在参数类型后面添加一个 & 符号。例如:

void swapNums(int &x, int &y);

在这个例子中,xy 是引用参数。这意味着函数 swapNums 将直接访问调用者提供的变量的内存地址。

引用传递示例

以下示例展示了如何使用引用传递来交换两个变量的值:

void swapNums(int &x, int &y) {
  int temp = x;
  x = y;
  y = temp;
}

int main() {
  int firstNum = 10;
  int secondNum = 20;

  cout << "Before swap: " << firstNum << " " << secondNum << endl;

  swapNums(firstNum, secondNum);

  cout << "After swap: " << firstNum << " " << secondNum << endl;

  return 0;
}

在该示例中,swapNums 函数接收两个引用参数 xy。当调用 swapNums 函数时,它将直接访问 firstNumsecondNum 变量的内存地址,并交换它们的值。

引用传递与值传递的区别

特性 引用传递 值传递
参数类型 引用类型 (int&、string& 等) 普通类型 (int、string 等)
参数传递 直接传递变量的内存地址 复制变量的值
修改参数值 可以修改调用者变量的值 不能修改调用者变量的值
效率 通常比值传递更有效 通常比引用传递效率低

引用传递的注意事项

  • 引用传递的参数必须在函数调用之前进行初始化。
  • 不能将空指针或野指针作为引用传递的参数。
  • 引用传递的参数不能重新绑定到其他变量。

总结

C++ 中的引用传递是一种强大的功能,可以提高代码的效率和可读性。通过理解引用传递的语法、用法和注意事项,您可以编写更加简洁、高效的 C++ 程序。

最后

为了方便其他设备和平台的小伙伴观看往期文章:

微信公众号搜索:Let us Coding,关注后即可获取最新文章推送

看完如果觉得有帮助,欢迎点赞、收藏、关注

相关文章
|
17天前
|
存储 安全 编译器
第二问:C++中const用法详解
`const` 是 C++ 中用于定义常量的关键字,主要作用是防止值被修改。它可以修饰变量、指针、函数参数、返回值、类成员等,确保数据的不可变性。`const` 的常见用法包括:
63 0
|
2月前
|
存储 C++ 容器
【C++】map、set基本用法
本文介绍了C++ STL中的`map`和`set`两种关联容器。`map`用于存储键值对,每个键唯一;而`set`存储唯一元素,不包含值。两者均基于红黑树实现,支持高效的查找、插入和删除操作。文中详细列举了它们的构造方法、迭代器、容量检查、元素修改等常用接口,并简要对比了`map`与`set`的主要差异。此外,还介绍了允许重复元素的`multiset`和`multimap`。
35 3
【C++】map、set基本用法
|
2月前
|
安全 编译器 C++
【C++11】可变模板参数详解
本文详细介绍了C++11引入的可变模板参数,这是一种允许模板接受任意数量和类型参数的强大工具。文章从基本概念入手,讲解了可变模板参数的语法、参数包的展开方法,以及如何结合递归调用、折叠表达式等技术实现高效编程。通过具体示例,如打印任意数量参数、类型安全的`printf`替代方案等,展示了其在实际开发中的应用。最后,文章讨论了性能优化策略和常见问题,帮助读者更好地理解和使用这一高级C++特性。
60 4
|
17天前
|
C++
第十三问:C++中静态变量的用法有哪些?
本文介绍了 C++ 中静态变量和函数的用法及原理。静态变量包括函数内的静态局部变量和类中的静态成员变量,前者在函数调用间保持值,后者属于类而非对象。静态函数不能访问非静态成员,但可以通过类名直接调用。静态链接使变量或函数仅在定义文件内可见,避免命名冲突。
37 0
|
3月前
|
算法 编译器 C++
【C++篇】领略模板编程的进阶之美:参数巧思与编译的智慧
【C++篇】领略模板编程的进阶之美:参数巧思与编译的智慧
98 2
|
4月前
|
Java C# C++
C++ 11新特性之语法甜点1
C++ 11新特性之语法甜点1
39 4
|
4月前
|
编译器 C++ 容器
C++ 11新特性之语法甜点2
C++ 11新特性之语法甜点2
34 1
|
4月前
|
存储 算法 编译器
C++ 11新特性之语法甜点4
C++ 11新特性之语法甜点4
32 0
|
4月前
|
安全 C++ 容器
C++ 11新特性之语法甜点3
C++ 11新特性之语法甜点3
45 0
|
5月前
|
编译器 C++ 容器
【C++】String常见函数用法
【C++】String常见函数用法