根据我在this问题中发现的一系列参考文献是非法的。我是C ++的新手,正在玩指针和解除引用,以下代码似乎执行得很好。
#include <iostream>
#include <cstdlib>
using namespace std;
struct A
{
int data1;
int data2;
A (void) : data1(0), data2(0) {}
// many more datas
};
int main()
{
cout << "test start" << endl;
A *a = new A();
A arr[100];
for (int x=0; x<100; x++) arr[x] = *a;
cout << "test done" << endl;
}
引擎盖下发生了什么?是放在a
的每个位置的array
对象的副本?如果是这样,当从类似函数返回对象引用时:
A &function (void) { return &A(); }
它和它一样吗?:
A function (void) {return A();}
答案 0 :(得分:0)
对于第一个问题,arr[x] = *a;
会导致程序将存储在对象中的所有数据复制到指定的数组元素。
对于第二个问题,A &function (void) { return &A(); }
似乎试图返回函数的地址,但格式不正确。查找“指向函数的指针”以获取更多信息。但是,你可以这样做:
A test;
A &function(void)
{
return test;
}
A &ref = function();
这样,您的程序中有一个可以在引用中使用的实际对象,并且您的函数将返回该对象的地址。这似乎是你试图用这个特定功能做的事情。
编辑:删除了错误的答案部分。 A function(void) { return A(); }
会创建一个对象并返回创建的对象。
Edit2:在return &test;
中将return test;
更改为A &function()
。