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

问题描述 投票:1回答:1

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点中的代码吗?

c++ arrays pass-by-reference return-type compile-time
1个回答
-1
投票
  1. 为什么?

因为Dennis Ritchie将其设计为在C中如此,并且因为C ++设计为与C兼容。

C中当然没有引用,但是引用遵循与指针相同的语法规则,它们是从C继承的。

  1. 可以写成以下形式:

没有这在C ++中是不正确的。

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

typedef只是一个别名;类型的其他名称。

如何简化此代码?

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

using array_t = int[10];

另一种选择是使用尾随返回类型,尽管它是否大致上是主观的:

auto f() -> int(&)[10] {
© www.soinside.com 2019 - 2024. All rights reserved.