gpt4 book ai didi

c++ - 如何通过引用访问结构内的结构属性

转载 作者:太空宇宙 更新时间:2023-11-04 14:37:49 25 4
gpt4 key购买 nike

我有以下结构。

typedef struct _abc{
int x;
int y;
} abc;

typedef struct _def{
abc a;
int b;
} def;

我想读取 def 中的 abc 结构。我通过以下方式进行。

int main() {
def x;
x.a = abc(); // Initializing 'a'
std::cout << &x.a << std::endl;
abc y = x.a; // Accessing 'a' later
std::cout << &y << std::endl;
}

但是从控制台输出我意识到对象引用被改变了。这意味着结构属性被复制。
在现实场景中,structure abc 很大,每次访问都复制它会花费很多时间。

typedef struct _def{
_def(abc &_a){b=0;a=_a;}
abc &a;
int b;
} def;


int main() {
abc a;
def x(a);
std::cout << &x.a << std::endl;
abc y = x.a;
std::cout << &y << std::endl;
}

我也试过这种方式,但它给了我编译错误。

有没有一种方法可以访问类的成员而无需复制它们......?

最佳答案

是的,有一种方法:引用

首先,让我们将您的程序从 C 转换为 C++(您的版本在语法上是有效的,但代表了一种过时的艺术形式;我们还将添加一个缺失的 header ):

#include <iostream>

struct abc
{
int x;
int y;
};

struct def
{
abc a;
int b;
};

int main()
{
def x;

// No need for this at all; creating `x` already created `x.a`
// x.a = abc();

// Prints the address of `x.a`
std::cout << &x.a << std::endl;


abc y = x.a;

// Prints the address of the _copy_ of `x.a` that you just made,
// called `y`
std::cout << &y << std::endl;


abc& z = x.a;

// Prints the address of the `x.a` via a reference called `z`
std::cout << &z << std::endl;
}

( live demo )

从上面的代码和演示中可以看出,可以声明一个引用作为现有对象的新名称。

请翻到介绍性 C++ 书中关于引用的页面;它们应该在其中得到很好的解释。

关于c++ - 如何通过引用访问结构内的结构属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48988457/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com