首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于const,该怎么处理

2012-09-24 
关于const例】:假设有如下函数声明:   string foo( )   void bar(string & s)   那么下面的表达式将是非

关于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值很大)的时候使用

热点排行