C++函数返回值作为左值问题

上一篇 / 下一篇  2012-09-07 13:57:11 / 个人分类:C++

51Testing软件测试网)N[~ Nc&F

  C++语言的函数返回值类型可以分为内部类型和自定义类型两大类。51Testing软件测试网| k s\w

3E mA ^/~'PM+O0  在函数返回内部类型中不能返回数组类型但可以返回指向数组的指针,同样也可以返回指向函数的函数指针。如果希望返回值可以作为左值(即可以放在赋值操作符左边的)那就必须返回引用类型。51Testing软件测试网e)@qG;[u

51Testing软件测试网A#vV;YTVw*ql

  而在函数返回自定义类型(即返回类类型)中根据是否可作为左值,返回值是否可调用成员函数的不同可分为以下四种情况。51Testing软件测试网C.R9`,o dE&\

[D3k*W/^5TqF0  T:返回类类型

4m kV0FK'J0 51Testing软件测试网#jp&l2}b;n'G

  1、T f();51Testing软件测试网4t)Q5mW3[$n

D9xbgh+K)i"U\0  2、const T f();51Testing软件测试网0aR:h;p3b@h&J{+\

51Testing软件测试网Jw9BkG8i

  3、T& f();51Testing软件测试网$Gn'p[8?

51Testing软件测试网N}MI%\&s@ ka

  4、const T& f();51Testing软件测试网 \LAde\}

51Testing软件测试网8r0}8i]{k.zX

  T f();返回一般的类类型,返回的类类型不能作为左值,但返回的类类型可以直接调用成员函数来修改,如function().set_Value();返回类类型调用复制构造函数。

EN Qz\p/Qh0

t[:[LBA b0  const T f();此种类型与上述第一种相同,唯一不同的是返回的类类型不能调用成员函数来修改,因为有const限定符。

t$T i,wpD3O0

.a s(yN@Xmx0  T& f();返回类的引用可以作为左值,并且返回的类类型引用可以直接调用成员函数来修改,返回的类类型不会调用复制构造函数。

FI|DLSv0 51Testing软件测试网G,EnKWj&x

  const T& f();不能作为左值,不能调用成员函数修改,不会调用复制构造函数。

PiXlWd0Z0 51Testing软件测试网3HN*OO3yv:dnH$e

  返回引用的函数返回一个左值。因此,这样的函数可用于任何要求使用左值的地方51Testing软件测试网_#t%c+n'} w

51Testing软件测试网p(V6O!~'q0pd9~

51Testing软件测试网P)JsK[(h'JZ

#include <iostream>51Testing软件测试网)f~f!S#R8aT
#include <string>51Testing软件测试网J-x&o2c7}"eF7d
 
9J)GeCq8I+r-t0using namespace std;
3x&BX5{d q0 
x"v v.qEn d*f0char &get_val(string &str, string::size_type ix)
GDhF.ZM/tw0{51Testing软件测试网} ~W:j V:]+l X }%y
       return str[ix];
-|4M5v,o8|)Y6t0}
U6[-UQ R:gu0 
r$Pp'Cx!g0int main()51Testing软件测试网5\u4s5B)dZ6i)X
{
G1`DyR GBp0       string s("a value");51Testing软件测试网;}+XXw$om8|
       cout << s << endl;
;fwmMD3U0 
-i(jXR!k.V*Ne0       get_val(s, 0) = 'A';51Testing软件测试网 G$\$n0ClZ,v!_
       cout << s << endl;51Testing软件测试网]R w&p"Z.OC1ve[
 51Testing软件测试网7m }r1enn
       return 0;
~8DONPi)U%D0}

0^"Z:^vS{u0hA.w;F0  给函数返回值赋值可能让人惊讶,用于函数返回的是一个引用,因此这是正确的,该引用是被返回元素的同义词51Testing软件测试网FCb:\P~ |l7~

51Testing软件测试网.M2r$~k6`/H5o-\

  如果不希望引用返回值被修改,返回值应该为const51Testing软件测试网1k]&_9?g s#mN

51Testing软件测试网#lg'Iqn

  const char &get_val

1a:J'dzP4m"_f6R!N0

TAG:

 

评分:0

我来说两句

Open Toolbar