关于const
例】:假设有如下函数声明:
string foo( );
void bar(string & s);
那么下面的表达式将是非法的:
bar(foo( ));
bar("hello world");
原因在于foo( )和"hello world"串都会产生一个临时对象,而在C++中,这些临时对象都是const类型的。因此上面的表达式就是试图将一个const类型的对象转换为非const类型,这是非法的。 引用型参数应该在能被定义为const的情况下,尽量定义为const 。
对这点表示疑问,不是太懂呀?谁能详细说明一下,构造函数的参数是字符串的时候,怎么办
[解决办法]
加上const限定,就可以用临时变量和一般的常量
调用bar("hello world")的时候相当于:
const string strTmp("hello world");
bar(strTmp); //strTmp是const,显然类型不匹配
而 bar(foo());与上面的类似
[解决办法]
最近我也再看着部分内容
如果函数具有普通的非const引用形参,例如void bar(string & s)
就不能通过const对象进行调用
因为此时函数可以修改传递进来的对象,这就违背了实参的const特性
调用这样的函数时,传递一个右值或具有需要转换的类型的对象也不允许
"hello world"是const常量,所以不能用啊
如果是s="hello world"就可以了
注意
void bar(string & s)中s表示实参的别名,可以通过s修改所调用实参的值
void bar(string s)中s是实参的副本,对于s做的任何操作都不影响所调用实参的值
void bar(const string & s)适用于不修改实参值且不想复制副本(有些string值很大)的时候使用