C ++中类定义中int&x声明的意义是啥[重复]

Posted

技术标签:

【中文标题】C ++中类定义中int&x声明的意义是啥[重复]【英文标题】:What is the significance of int &x declaration in class definition in C++ [duplicate]C ++中类定义中int&x声明的意义是什么[重复] 【发布时间】:2022-01-15 09:31:14 【问题描述】:
class Pointer 
private:
    int &x;
public:
    Pointer(int &y) : x(y) 
    int getT()  return x; 

;

int main()

    int w = 40;
    Pointer test(w);
    std::cout << &test <<' ' << &w;

类定义中的 int &x 声明有什么意义?我知道作为构造函数的参数传递的 int &y 是通过引用传递的值,但是 int &x 因为这种类型的声明向我显示 main() 函数内部的错误呢?

【问题讨论】:

您看到的错误是什么?您的代码编译后请显示minimal reproducible example 在此上下文中,x 是 reference variable。它与引用参数int&amp; y 具有相似的语义:它是对另一个int 的引用。对于Pointer test(w);test.x 将是对w 的引用。 也许,您应该尝试将代码设为int &amp;getT() 并输出std::cout &lt;&lt; &amp;test.getT() &lt;&lt; ' ' &lt;&lt; &amp;wmain 中的w 指向与x 相同的内存位置。我还建议将 x 重命名为 t 或将 getT 重命名为 getX。也要小心这些参考资料。将私有 x 指向内存中的确切位置作为一个不同的变量很容易出错,而 Pointer 不知道它可以更改。在这种情况下,复制对w 的引用很可能与通过引用传递w 的工作量相同,因为int 是如此之小。 【参考方案1】:

在构造函数声明中的两种情况

Pointer(int &y) : x(y) 

在数据成员声明中

int &x;

声明了一个引用。

调用构造函数后

Pointer test(w);

对象测试包含对通过引用传递的对象w 的引用。

所以例如你可以写

int w = 40;
Pointer test(w);

std::cout << test.get() << '\n';

输出将是

40

现在您可以更改变量w,例如

w = 100;

还有这句话

std::cout

会输出

100

因为它通过引用输出存储在对象测试中的同一对象的值。

引用x 将在对象test 中有效,而引用的对象w 本身是活动的。

【讨论】:

以上是关于C ++中类定义中int&x声明的意义是啥[重复]的主要内容,如果未能解决你的问题,请参考以下文章

OC基础--OC中类的声明与定义

java中类定义的属性是啥意思

python中类的构造方法中需要定义和初始化变量吗?

OC基础--OC中类的定义

面向对象中属性是啥?有啥作用?

实验2:函数重载函数模板简单类的定义和实现