1 非引用的 (const形参 或者非const形参),实参既可以是const 也可以是非const
- a 如果函数使用非引用的非const形参,既可以传递const实参,也可以传递非const实参。因为初始化复制了初始化式的值,所以可以const对象初始化非const对象
- b如果函数使用非引用的const形参,既可以传递const实参,也可以传递非const实参。因为实参仍然以副本形式传递,所以传递给函数的既可以是const也可以是非const
2 引用形参(非const引用形参不灵活,一般将不需要修改的引用定义为const引用)
非const引用形参只能用同类型的非const对象初始化:
- a 如果函数是普通的非const引用形参,显然不能用const实参,因为会在函数内被修改
- b非const引用必须用该类型的对象进行初始化 ,不能使用右值(或字面值)、可转化类型。
所以涉及到重载:非引用的const和非const ,不是重载 。即当形参以副本传递时,不能基于形参是否为const来实现重载。
C++primer P229 236