gpt4 book ai didi

c++ - 解释从函数中通过引用返回数组的语法

转载 作者:行者123 更新时间:2023-12-01 14:20:17 26 4
gpt4 key购买 nike

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;
    }

    或类似的东西(没有 typedef)?

  3. 像这样使用时我无法理解 typedef 的用法:

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

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

最佳答案

  1. why?

因为 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. Can it be written as below:

没有。这在 C++ 中是病式的。

  1. I couldn't understand typedef usage when using it like:

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

how will the this code be simplified?

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

using array_t = int[10];

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

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

and will it look like the code in point 1?

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

关于c++ - 解释从函数中通过引用返回数组的语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61820171/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com