int &x 声明在 C++ [复制] 中的类定义中有什么意义

What is the significance of int &x declaration in class definition in C++ [duplicate]

提问人:Aditya Prakash 提问时间:12/11/2021 最后编辑:Vlad from MoscowAditya Prakash 更新时间:12/11/2021 访问量:341

问:

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() 函数中向我展示了一个错误?

C++ C++11 逐引用 传递声明

评论

3赞 Alan Birtles 12/11/2021
您看到的错误是什么?您的代码在编译时请显示一个最小的可重现示例
0赞 Nathan Pierson 12/11/2021
在此上下文中是一个参考变量。它与引用参数具有相似的语义:它是对另一个 .在 的情况下,将是对 的引用。xint& yintPointer test(w);test.xw
0赞 user904963 12/11/2021
也许,您应该尝试编写代码并输出 . in 指向内存中与 相同的位置。我还建议重命名为 或 .也要小心这样的引用。将内存中确切位置的私有指向作为可以在不知情的情况下更改的不同变量很容易出错。在这种情况下,复制引用很可能与通过引用传递的工作量相同,因为它非常小。int &getT()std::cout << &test.getT() << ' ' << &wwmainxxtgetTgetXxPointerwwint

答:

2赞 Vlad from Moscow 12/11/2021 #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 << test.get() << '\n';

将输出

100

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

当被引用的对象本身处于活动状态时,引用在对象中将有效。xtestw