解释通过从函数引用返回数组的语法

Explain syntax for returning array by reference from a function

本文关键字:返回 数组 语法 引用 函数 解释      更新时间:2023-10-16

C++函数的语法是:

return_type function_name(parameter1, parameter2, ...)
{
// function body
}

我对"从函数返回数组的引用"有一些疑问:

首先指定返回
  1. 类型,然后指定函数名称,但要返回数组的引用,它写为:

    // for array of size 10
    int (&f())[10] {
    return global;
    }        
    

    为什么?

  2. 可以这样写吗:

    // return type followed by function name
    int&[10] f(){
    return global;
    }
    

    或类似的东西(没有类型定义(?

  3. 使用时,我无法理解 typedef 的用法,例如:

    typedef int array_t[10];
    array_t& f() {
    return global;
    }
    

    上面的代码将如何简化?简化的代码会像第1点中的代码一样吗?

  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

函数声明的不同之处仅在于它具有参数列表。它总是紧跟在名称之后。而且因为它紧跟在名称之后,所以它位于数组大小之前。

  1. 可以这样写吗:

不。这在C++是不成熟的。

  1. 我在使用它时无法理解 typedef 的用法,例如:

typedef只是一个别名;类型的不同名称。

此代码将如何简化?

3. 中的代码非常简单。就个人而言,我更喜欢类型别名的using语法而不是typedef

using array_t = int[10];

另一种选择是使用尾随返回类型,尽管这是否或多或少简单是主观的:

auto f() -> int(&)[10] {

它看起来像第 1 点中的代码吗?

雕刻看起来不同,但它声明了相同的功能。