c++ - 解释通过函数引用返回数组的语法
问题描述
C++中函数的语法是:
return_type function_name(parameter1, parameter2, ...)
{
// function body
}
我对“从函数返回数组的引用”有一些疑问:
首先指定返回类型,然后指定函数名称,但要返回数组的引用,它被写为:
// for array of size 10 int (&f())[10] { return global; }
为什么?
能不能写成下面这样:
// return type followed by function name int&[10] f(){ return global; }
或类似的东西(没有typedef)?
使用它时我无法理解 typedef 的用法:
typedef int array_t[10]; array_t& f() { return global; }
上面的代码将如何简化?简化的代码会像第 1 点中的代码吗?
解决方案
- 为什么?
因为 Dennis Ritchie 将其设计为 C 语言,并且因为 C++ 被设计为与 C 兼容。
当然,C 中没有引用,但引用遵循与指针相同的语法规则,指针继承自 C。
然而,主要的困惑似乎并不在于引用标点符号的位置,而在于数组语法。数组大小总是在名称的右侧。同样的模式也适用于变量:
int arr[size];
| | |
| | size
| name
element type
int (&arr_ref)[size];
| | |
| | size
| name
element type
int (&f())[10]
| | |
| | size
| name
element type
函数声明的不同之处仅在于它具有参数列表。它总是紧跟在名称之后。而且因为它紧跟在名称之后,所以它在数组大小之前。
- 能不能写成下面这样:
不,那在 C++ 中是不正确的。
- 使用它时我无法理解 typedef 的用法:
typedef
只是一个别名;类型的不同名称。
这段代码将如何简化?
3. 中的代码非常简单。就个人而言,我更喜欢using
类型别名的语法,而不是typedef
:
using array_t = int[10];
另一种选择是使用尾随返回类型,尽管这或多或少简单是主观的:
auto f() -> int(&)[10] {
它看起来像第 1 点中的代码吗?
声明看起来不同,但它声明了相同的函数。
推荐阅读
- android - 只能从前台访问位置,但谷歌说我使用后台
- python - 当代码运行 Pyspark 时,EMR 上的 Jupyter 笔记本不打印输出
- c# - Blazor EditForm 验证具有多个值的自定义验证属性
- python - 关于理解 Pytorch .named_modules() 循环的问题
- typescript - 如何在 Vue3 中使用 typescript 注册子组件
- c# - 同一主键ApplicationUser表上的EF多个外键关系
- php - 在供应商 vscode 中找不到函数的定义
- python - 扩展 Google 的 HelloAnalytics Python 脚本以提取 csv 中的数据
- java - 这两个代码块有什么区别?
- npm - 下划线 npm 包上的任意代码执行错误