怎么初始化,非引用非const形参

怎样初始化,非引用非const形参?
《C++Primer》第四版
7.2.1 非引用形参
1.指针形参
我们既可以用int *也可以用const int *类型的实参调用use_ptr函数;但仅能将int *类型的实参传递给reset函数。
2.const形参
在调用函数时,如果该函数使用非引用的非const形参,则既可给该函数传递const实参,也可传递非const的实参。
--------

问题:
1.函数:reset()是非引用非const参数。
书上说,只用int *,也就是非const实参初始化它了。对么?
2.那么,上面两句话,是不是互相矛盾啊?
------解决方案--------------------
不矛盾啊!一个是对于指针来说的,一个是对于对象来说的。

指针传参是传值的,也就是传递的内存地址。假如我们将const对象的地址传递给非const指针,那么在函数内部就可以通过该指针修改实参的值了,但是该实参又是const的,这不就矛盾了!!!所以不允许将const对象地址传递给非const指针。

对象传参虽然也是传值的,但只是复制了内存中的值,在函数内部操作的是实参的副本,无论怎样都不会改变实参的值。所以对于非引用的非 const 形参,既可传递 const 实参也可传递非 const 的实参。


------解决方案--------------------
同意二楼的说法,对于const这个东西确实很头疼,你得注意的是,const在普通变量和指针中的用法是有区别的。const一般用于指针 引用 对象等,一般是很少用于普通变量和数组类型的,因为意义不大。