交换的变化在哪里?

use*_*061 -1 c++ swap

这段代码:

#include <stdio.h>

static void swap(unsigned char& a, unsigned char& b)
{
    unsigned char t = a;
    a = b;
    b = t;
}

int main()
{
    const unsigned bgr = 0x0000FF;
    swap(((unsigned char*) &bgr)[0], ((unsigned char*) &bgr)[2]);
    printf("0x%06X\n", bgr);
}
Run Code Online (Sandbox Code Playgroud)

输出:

0x0000FF

交换的变化在哪里?

jua*_*nza 5

你正在尝试修改bgr.bgrconst.修改const变量是未定义的行为.这可以通过多种方式表现出来,而且您不能依赖任何特定的行为.了解平台上发生的事情的一个好方法是查看生成的汇编代码.