const typename * var 与const typename & var有什么异同?

在C++ premier plus中,在定义类的构造函数时,构造函数的形参中包含一个字符串与一个浮点数。
类名为BankAccount,
书中显示,其构造函数有两种定义方式:
1:

BankAccount::BankAccount(const char * client, double bal){...}

2:

BankAccount::BankAccount(const std::string & client, double bal){...}

请问这两处的const char * client与const std::string & client有什么异同?
可以把第一种写为const char & client 吗?

在C++中,在函数参数中使用&符号,一般将对应的变量认为是引用。const std::string & client,说明client是一个引用。
引用跟指针的用法不一样,不能替换。

用指针还是引用,要看它本身的类型是什么
const char ,代表一个字符指针,实际是一个字符串第一个字符的地址,你改成char &的话,只能表示第一个字符的值,不能代表一个字符串
const std::string &,代表一个字符串对象的引用,因为std::string本身是一个字符串类,它封装了一个char 变量的相关操作,自身已经代表字符串了,所以不需要再定义为
引用代表这个变量本身,强调变量的类型不可修改;指针实际本质是一个四字节整型变量,写成int ,char是便于阅读和编译器理解,但并不是强制的,你可以这样 int * p; float f; p = (int
)&f;的方式进行强制转换。但引用不可以这么做

*代表指针,表明参数为指针,调用的时候需要地址,如f(&a),指针的修改会直接作用于实参。
&是引用,调用时用f(a),引用类型的形参就通过形实结合,成为实参的一个别名,对形参的任何操作也就会直接作用于实参。
如果不用引用或者指针的话,形参需要复制一份实参用于函数,特别是当传递较大的数据作为参数时,用引用或者指针作为函数参数可以节省一个复制的过程,提高效率。

加 const修饰参数表示该参数不能在函数体内部修改,如果没有const,就变成了上面的引用或者指针了,这时候你在函数内部对该变量的修改会直接导致实参的变化。当你不希望调用该函数的时候该变量被函数体内部修改,或者防止该参数被修改,就价格const来限制。