Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.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++ 错误C2234:引用数组非法_C++ - Fatal编程技术网

C++ 错误C2234:引用数组非法

C++ 错误C2234:引用数组非法,c++,C++,我编写的代码如下: void Print(const int & dataArray[], const int & arraySize) { // problem for(int i = 0; i<arraySize; i++) { cout << dataArray[i] << " "; } cout << endl; } 编译器说引用数组是非法的,为什么它是非法的?? 我看到了,

我编写的代码如下:

 void Print(const int & dataArray[], const int & arraySize) {  // problem 
    for(int i = 0; i<arraySize; i++) {
        cout << dataArray[i] << " ";
    }
    cout << endl;
    }
编译器说引用数组是非法的,为什么它是非法的??
我看到了,它说建议我们使用const和reference,我只是尝试实现它(我是初学者),我还想知道在
void打印中(const int dataArray[],const int&arraySize)
参数我使用const,来限定arraySize,对吗?(还是比int arraySize或const int arraySize好得多?),我还想使用const和to dataArray[],但我失败了

数组要求其元素是默认可构造的,而引用不是,因此引用数组是非法的。这:

const int & dataArray[]
是一个引用数组。如果希望引用数组,则需要:

const int (&dataArray)[]

数组要求其元素是默认可构造的,而引用不是,因此引用数组是非法的。这:

const int & dataArray[]
是一个引用数组。如果希望引用数组,则需要:

const int (&dataArray)[]

迂腐地说,引用数组非法的原因是因为标准明确禁止它们

C++03:8.3.2/4 不得引用参考文献,不得引用参考文献数组, 而且没有指向引用的指针

我的

标准明确禁止引用数组(可能还有更多)的一个原因是数组的索引方式。假设你这样做:

Gizmo& gizmos[] = {...};
Gizmo&* g3 = &gizmos[2];
这里有几件事不对。首先,您有一个指向引用的指针,这是非法的。其次,为了计算gizmo[2],编译器必须对指针进行隐式转换,然后在此基础上进行指针算术。小发明有多大&

根据该标准,
sizeof
a reference本身未指定。但是,当
sizeof
应用于引用时,结果是引用类型的大小

C++03:5.3.3/2 Sizeof
应用于引用或引用类型时,结果为 引用类型的大小

尝试运行此代码,看看会发生什么:

#include <iostream>
#include <iomanip>
using namespace std;
struct Gizmo { int n_[100]; };

int main()
{
    typedef Gizmo& GR;
    size_t n = sizeof(GR);
    cout << n << endl;
}
#包括
#包括
使用名称空间std;
结构Gizmo{int n_uU100];};
int main()
{
typedef Gizmo&GR;
尺寸n=尺寸f(GR);

从学术角度讲,引用数组非法的原因是因为标准明确禁止它们

C++03:8.3.2/4 不得引用参考文献,不得引用参考文献数组, 而且没有指向引用的指针

我的

标准明确禁止引用数组的一个原因(可能还有更多)是因为数组的索引方式。假设您这样做:

Gizmo& gizmos[] = {...};
Gizmo&* g3 = &gizmos[2];
这里有几点错误。首先,您有一个指向引用的指针,这是非法的。其次,为了计算
小控件[2]
,编译器必须对指针进行隐式转换,然后在此基础上进行指针算术。
小控件有多大&

根据该标准,引用的
sizeof
本身是未指定的。但是当
sizeof
应用于引用时,结果是引用类型的大小

C++03:5.3.3/2 Sizeof
应用于引用或引用类型时,结果为 引用类型的大小

尝试运行此代码,看看会发生什么:

#include <iostream>
#include <iomanip>
using namespace std;
struct Gizmo { int n_[100]; };

int main()
{
    typedef Gizmo& GR;
    size_t n = sizeof(GR);
    cout << n << endl;
}
#包括
#包括
使用名称空间std;
结构Gizmo{int n_uU100];};
int main()
{
typedef Gizmo&GR;
尺寸n=尺寸f(GR);

无法创建引用数组?按值获取
int
的常量引用可能比按值获取
int
的效率低。如何创建引用数组?按值获取
int
的常量引用可能比按值获取
int
的效率低。数组实际上不会y要求它的元素是默认可构造的。在8.3.4/1中对引用数组有一个明确的禁止。数组实际上并不要求它的元素是默认可构造的。在8.3.4/1中对引用数组有一个明确的禁止。哇,实际上有人试图合理化标准所说的,而不是han只是说“看:这是禁止的”。;-)+1在我看来,数组/引用容器的概念的问题最清楚的表述是:如果没有明确说明,那么答案中就隐含了这样一种说法:我们如何消除元素地址与引用本身之间的歧义?如果不完全打破数组语义,我们就无法做到这一点(索引、算术)并且添加无意义的语法来消除歧义。当简单地将引用包装在结构中时,我们保留了两个选项:引用的地址或其父对象的地址……我的意思是“引用的目标地址或其父对象的地址
struct
”。无论如何,我在这里漫谈了所有这些内容——如果可能的话,最终可能会将其作为答案发布让它变成一个有用的长格式,而不要陷入咆哮,呵呵。哇,实际上有人试图使标准所说的合理化,而不仅仅是说‘看,这是禁止的’;-)+1在我看来,关于引用数组/容器这个概念的问题,最清楚的表述是:如果没有明确说明,那么答案中可能隐含着这样一种说法:我们如何消除元素地址与引用本身之间的歧义?如果不完全打破数组语义(索引、算术),我们就无法做到这一点并且添加无意义的语法来消除歧义。当简单地将引用包装在结构中时,我们保留了两个选项:引用的地址或其父对象的地址……我的意思是“引用的目标地址或其父对象的地址
struct
”。无论如何,我在这里漫谈了所有这些内容——如果可能的话,最终可能会将其作为答案发布把它变成一个有用的长形,而不要陷入咆哮,呵呵。