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& y
具有相似的语义:它是对另一个int
的引用。对于Pointer test(w);
,test.x
将是对w
的引用。
也许,您应该尝试将代码设为int &getT()
并输出std::cout << &test.getT() << ' ' << &w
。 main
中的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声明的意义是啥[重复]的主要内容,如果未能解决你的问题,请参考以下文章