Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
解释通过引用从函数返回数组的语法 C++中的函数语法是: return_type function_name(parameter1, parameter2, ...) { // function body }_C++_Arrays_Pass By Reference_Return Type_Compile Time - Fatal编程技术网

解释通过引用从函数返回数组的语法 C++中的函数语法是: return_type function_name(parameter1, parameter2, ...) { // function body }

解释通过引用从函数返回数组的语法 C++中的函数语法是: return_type function_name(parameter1, parameter2, ...) { // function body },c++,arrays,pass-by-reference,return-type,compile-time,C++,Arrays,Pass By Reference,Return Type,Compile Time,我对“从函数返回数组引用”有一些疑问: 首先指定返回类型,然后指定函数名,但为了返回数组的引用,将其写入: // for array of size 10 int (&f())[10] { return global; } 为什么? 可以这样写吗 // return type followed by function name int&[10] f(){ return global; } 或者类似的东西(没有typedef) 我无法理解typede

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

  • 首先指定返回类型,然后指定函数名,但为了返回数组的引用,将其写入:

    // 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.</P>兼容。 当然,C中没有引用,但是引用遵循与指针相同的语法规则,这些规则是从C继承的

    然而,主要的困惑似乎不是关于引用puncutator的位置,而是关于数组语法。数组大小始终位于名称的右侧。同样的模式也适用于变量:

    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中。这是最简单的。就个人而言,我更喜欢对类型别名使用
    语法,而不是
    typedef

    using array_t = int[10];
    
    另一种选择是使用尾随返回类型,尽管这是否简单是主观的:

    auto f() -> int(&)[10] {
    
    它看起来会像第1点中的代码吗


    衰减看起来不同,但它声明了相同的函数。

    1)
    为什么?
    ?因为语言(标准)规定是这样的。你还指望什么别的理由?2) 第3条)
    如何简化此代码?
    请更正问题“代码将如何简化”。。什么可以简化<代码>它看起来会像第1点中的代码吗?
    显然,第1点和第3点中的代码片段“看起来”不同。是的,第1点和第3点中的函数声明彼此兼容“这段代码将如何简化?”-不使用C样式的数组,而是使用一个。@KamilCuk,我认为当有人问“为什么语言的这一特性是这样实现的”时,他们希望得到标准以这种方式指定它的基本原理(如果有的话)。
    引用遵循与指针相同的语法规则,从C继承而来,但在C中返回指向数组的指针
    int*f(){//body of function}
    ,这与通过在函数名后指定大小返回数组引用的方式不同。@Shub
    int*
    不是指向数组的指针。它是指向整数的指针。对整数的引用具有相同的语法:
    int&f()
    。指向数组的指针的语法与引用数组的语法相同:
    int(*f())[10]
    谢谢。另外,您能否解释一下
    typedef int array_t[10]编译器如何将
    数组t&f()
    简化为
    int(&f())[10]