【发布时间】: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是如此之小。
标签: c++ c++11 reference pass-by-reference declaration