C++ C++;为什么我得到这个输出。(这里是新手)

C++ C++;为什么我得到这个输出。(这里是新手),c++,increment,ampersand,C++,Increment,Ampersand,所以在下面的代码中,我一直在试图弄清楚为什么代码的输出结果是 X=2,Y=2 当我最初认为它是x=1和y=1时。我还是一个充满了C++的人,在这个学期里,有了一个比我更有知识的人的一点解释,希望能把这个概念融入我的脑海。 int main() { int x = 0; int& y = x; y++; x++; std::cout << "x = " << x << " y = " << y

所以在下面的代码中,我一直在试图弄清楚为什么代码的输出结果是

X=2,Y=2

当我最初认为它是x=1和y=1时。我还是一个充满了C++的人,在这个学期里,有了一个比我更有知识的人的一点解释,希望能把这个概念融入我的脑海。

int main()
{

    int x = 0;

    int& y = x;

    y++;

    x++;

    std::cout << "x = " << x << " y = " << y << std::endl;
}
intmain()
{
int x=0;
int&y=x;
y++;
x++;

std::coutx和y彼此没有区别。引用表示x的另一个名称是y。因此,当你调用y时,它调用x,这意味着如果你增加y,它增加x。然后你再次增加x,x变成2。因为y代表x,当你调用y时,它调用x,你再次看到2。

关键点是引用符号的意思:

int& y = x;
  • 它表示您正在为“x”分配别名,因此“y”实际上与“x”共享相同的内存地址(物理上)
  • 将更改由“x”和“y”共享的内存地址内的值。与操作相同

    x++;
    
    因此,您对同一内存地址进行了2次递增,初始值为“0”,该值变为“2”

  • 同样的想法,因为“x”和“y”都指向完全相同的内存地址,所以打印“x”和“y”将得到相同的值

  • 我相信我的输出的原因是,即使y有一个&符号,我认为y是x的别名,因此x和y都被设置为0,直到它们递增,并将产生x=1和y=1的输出,但输出的是x=2和y=2。x和y彼此没有区别。引用意味着x的另一个名称是y。那么当你叫y,它叫x,这意味着如果你增加y,它就增加x。然后你再增加x,x变成2。因为y代表x,当你叫y时,它叫x,你又看到了2。@73memedream,你说对了。
    y
    是别名
    x
    。你描述的行为是如果
    y
    x
    的副本,会发生什么。哦啊!我现在明白了。哇,我真傻……谢谢@ssovukluk
    y
    只是
    x
    的别名,它们在内存中指的是同一个地址,只有不同的名称。所以影响一个的是另一个。事实上它们是一样的。这类问题只值得评论。
    x++;