顶层const
const另一个不好理解的就是带有顶层const的形参的const会被忽略!也就是:
A: foo(int a){}
B: foo(const int a){}
不能是重载, c++ Primer
中文版给的说明是形参列表应该有明显不同(不吐不快:这还不明显)。应该说是迁就 C
,在 C 语言里,版本 A 和版本 B 是没有区别的。如果这两个版本定义在相同的作用域中,C 编译器就会认为是函数重定义,而不是函数重载,因为 C 中根本就没有重载的概念。由于 C 中函数参数只有传值一种传递方式,因此 const 只是告诉编译器,形参在函数里面值是不可以被改变的。但是这已经跟实参没有任何关系了,传递进来的只不过是一个副本。与之不同的是 C++ 有引用,传引用会对实参造成影响,即引用的顶层const产生重载。