b是const int类型,这样写给编译器优化留下空间,表明你不会也不应该通过任何方法去改变b的值,const嘛。所以
cout << *a << b;就会直接使用1来代替b,变成
cout << *a << 1;这样提高了效率,又不影响程序员的本意。所以,在编译的时候,所有的使用变量b的地方都被替换成了1,就有这样的结果了。如果你希望输出是3,3,那么不要使用const int b = 1;写int b = 1;不写const就可以了。或者,写成volatile const int b = 1;试试,volatile 关键字会禁止掉编译器的这种优化