这段代码:
#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
交换的变化在哪里?
你正在尝试修改bgr.bgr是const.修改const变量是未定义的行为.这可以通过多种方式表现出来,而且您不能依赖任何特定的行为.了解平台上发生的事情的一个好方法是查看生成的汇编代码.