c++ 如何在结构成员值自身中引用该值?

j2cgzkjk  于 2023-02-06  发布在  其他
关注(0)|答案(1)|浏览(118)

假设我在C/C++中有以下简单的结构:

struct Example {
    int member_a;
    int member_b;
}

现在,我有一个对象ex,为了冗余和正确地关联一些成员,我需要使用member_a的值来赋值member_b,在这里,因为我知道这个对象的名称,类似这样的操作对我来说是有效的:

struct Example ex = {
    .member_a = 50,                 
    .member_b = ex.member_a * 2    // Assigning member_b in terms of member_a.
}

只要在Example结构的声明中int member_a保持在int member_b之上,上述赋值就有效。
我已经尝试过使用.member_b = member_a ....member_b = .member_a ...,这两种方法都无法识别结构对象中的member_a。.member_b = <same_object_name>.member_a似乎只能处理初始定义。
注意:所有这些都已经在版本C18上尝试过了,预计在版本C++20上也会以同样的方式工作
这是一个解决这个单一结构体对象的方法但是如果我不想使用对象名或者我使用的是匿名的(未命名的)结构对象?是否存在指针或this的等价物,它们与C兼容,以便在对象中使用关系(如果可能的话,最好在结构定义本身中)?即使能够像.member_a那样调用成员的值也可以。

inn6fuwd

inn6fuwd1#

C/C是两种完全不同的语言,如果现代使用的话,C可以利用类和this关键字,我假设你想用C++中的结构来回答这个问题。
如果你只想有一个直接的关系,比如成员b是两个成员,那么只要在原始类中将它们设置为相等,这样它就可以在编译时发生。

struct Example {
int member_a;
int member_b = 2 * member_a;
};

否则你必须明确地定位你在使用哪个结构体来访问它内部的int型变量,在这种情况下,一个结构体没有任何成员严格地属于它,编译器也不知道member_a是否会有值,如果你想使用一个类,那么你可以随时用函数或set语句将它设置为自身。

class Bob {
public:
    int member_a;
    int member_b;
private:
    int double_member_a(){
    member_b = 2 * member_a;    
    return member_b
    };
};

Bob bob;

bob.member_a = 1;
bob.member_b = bob.member_a; // or bob.doubleA();

不管使用哪种方法,你仍然需要根据对象的具体示例来改变一个struct或class的值,所以你必须声明是哪一个,尽管如果你要遍历class的任何x struct,你只需把它们放到一个vector中,然后执行一个基于范围的for循环,并随时访问一个。

相关问题