解释通过引用从函数返回数组的语法 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 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
函数声明的不同之处在于它具有参数列表。总是紧跟在名字后面。由于它紧跟在名称之后,因此它位于数组大小之前
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}
,这与通过在函数名后指定大小返回数组引用的方式不同。@Shubint*
不是指向数组的指针。它是指向整数的指针。对整数的引用具有相同的语法:int&f()
。指向数组的指针的语法与引用数组的语法相同:int(*f())[10]
谢谢。另外,您能否解释一下typedef int array_t[10]代码>编译器如何将数组t&f()
简化为int(&f())[10]
。