ºìÁªLinuxÃÅ»§
Linux°ïÖú

liunx±à³ÌÖ®constʹÓÃÏê½â

·¢²¼Ê±¼ä:2006-08-22 00:19:49À´Ô´:ºìÁª×÷Õß:MORR
Ò» const»ù´¡

Èç¹ûconst¹Ø¼ü×Ö²»Éæ¼°µ½Ö¸Õ룬ÎÒÃǺܺÃÀí½â£¬ÏÂÃæÊÇÉæ¼°µ½Ö¸ÕëµÄÇé¿ö£º

int b = 500;
const int* a = &b; [1]
int const *a = &b; [2]
int* const a = &b; [3]
const int* const a = &b; [4]

Èç¹ûÄãÄÜÇø·Ö³öÉÏÊöËÄÖÖÇé¿ö£¬ÄÇô£¬¹§Ï²Ä㣬ÄãÒѾ­Âõ³öÁË¿ÉϲµÄÒ»²½¡£²»ÖªµÀ£¬Ò²Ã»¹Øϵ£¬ÎÒÃÇ¿ÉÒԲο¼¡¶Effective c++¡·Item21ÉϵÄ×ö·¨£¬Èç¹ûconstλÓÚÐǺŵÄ×ó²à£¬Ôòconst¾ÍÊÇÓÃÀ´ÐÞÊÎÖ¸ÕëËùÖ¸ÏòµÄ±äÁ¿£¬¼´Ö¸ÕëÖ¸ÏòΪ³£Á¿£»Èç¹ûconstλÓÚÐǺŵÄÓҲ࣬const¾ÍÊÇÐÞÊÎÖ¸Õë±¾Éí£¬¼´Ö¸Õë±¾ÉíÊdz£Á¿¡£Òò´Ë£¬[1]ºÍ[2]µÄÇé¿öÏàͬ£¬¶¼ÊÇÖ¸ÕëËùÖ¸ÏòµÄÄÚÈÝΪ³£Á¿£¨const·ÅÔÚ±äÁ¿ÉùÃ÷·ûµÄλÖÃÎ޹أ©£¬ÕâÖÖÇé¿öϲ»ÔÊÐí¶ÔÄÚÈݽøÐиü¸Ä²Ù×÷£¬Èç²»ÄÜ*a = 3 £»[3]ΪָÕë±¾ÉíÊdz£Á¿£¬¶øÖ¸ÕëËùÖ¸ÏòµÄÄÚÈݲ»Êdz£Á¿£¬ÕâÖÖÇé¿öϲ»ÄܶÔÖ¸Õë±¾Éí½øÐиü¸Ä²Ù×÷£¬Èça++ÊÇ´íÎóµÄ£»[4]ΪָÕë±¾ÉíºÍÖ¸ÏòµÄÄÚÈݾùΪ³£Á¿¡£
ÁíÍâconst µÄһЩǿ´óµÄ¹¦ÄÜÔÚÓÚËüÔÚº¯ÊýÉùÃ÷ÖеÄÓ¦Óá£ÔÚÒ»¸öº¯ÊýÉùÃ÷ÖУ¬const ¿ÉÒÔÐÞÊκ¯ÊýµÄ·µ»ØÖµ£¬»òij¸ö²ÎÊý£»¶ÔÓÚ³ÉÔ±º¯Êý£¬»¹¿ÉÒÔÐÞÊÎÊÇÕû¸öº¯Êý¡£ÓÐÈçϼ¸ÖÖÇé¿ö£¬ÒÔÏ»áÖð½¥µÄ˵Ã÷Ó÷¨£º

A& operator=(const A& a);
void fun0(const A* a );
void fun1( ) const; // fun1( ) ΪÀà³ÉÔ±º¯Êý
const A fun2( );

¶þ constµÄ³õʼ»¯

ÏÈ¿´Ò»ÏÂconst±äÁ¿³õʼ»¯µÄÇé¿ö
1) ·ÇÖ¸Õëconst³£Á¿³õʼ»¯µÄÇé¿ö£º

A b;
const A a = b;

2) Ö¸Õë(ÒýÓÃ)const³£Á¿³õʼ»¯µÄÇé¿ö£º

A* d = new A();
const A* c = d;
»òÕߣºconst A* c = new A();
ÒýÓãº
A f;
const A& e = f; // ÕâÑù×÷eÖ»ÄÜ·ÃÎÊÉùÃ÷ΪconstµÄº¯Êý£¬¶ø²»ÄÜ·ÃÎÊÒ»°ãµÄ³ÉÔ±º¯Êý£»

[˼¿¼1]£º ÒÔϵÄÕâÖÖ¸³Öµ·½·¨ÕýÈ·Âð£¿
const A* c=new A();
A* e = c;
[˼¿¼2]£º ÒÔϵÄÕâÖÖ¸³Öµ·½·¨ÕýÈ·Âð£¿
A* const c = new A();
A* b = c;

Èý ×÷Ϊ²ÎÊýºÍ·µ»ØÖµµÄconstÐÞÊηû

Æäʵ£¬²»ÂÛÊDzÎÊý»¹ÊÇ·µ»ØÖµ£¬µÀÀí¶¼ÊÇÒ»ÑùµÄ£¬²ÎÊý´«ÈëʱºòºÍº¯Êý·µ»ØµÄʱºò£¬³õʼ»¯const±äÁ¿
1 ÐÞÊβÎÊýµÄconst£¬Èç void fun0(const A* a ); void fun1(const A& a);
µ÷Óú¯ÊýµÄʱºò£¬ÓÃÏàÓ¦µÄ±äÁ¿³õʼ»¯const³£Á¿£¬ÔòÔÚº¯ÊýÌåÖУ¬°´ÕÕconstËùÐÞÊεIJ¿·Ö½øÐг£Á¿»¯£¬ÈçÐβÎΪconst A* a£¬Ôò²»ÄܶԴ«µÝ½øÀ´µÄÖ¸ÕëµÄÄÚÈݽøÐиı䣬±£»¤ÁËÔ­Ö¸ÕëËùÖ¸ÏòµÄÄÚÈÝ£»ÈçÐβÎΪconst A& a£¬Ôò²»ÄܶԴ«µÝ½øÀ´µÄÒýÓöÔÏó½øÐиı䣬±£»¤ÁËÔ­¶ÔÏóµÄÊôÐÔ¡£
[×¢Òâ]£º²ÎÊýconstͨ³£ÓÃÓÚ²ÎÊýΪָÕë»òÒýÓõÄÇé¿ö;
2 ÐÞÊηµ»ØÖµµÄconst£¬Èçconst A fun2( ); const A* fun3( );
ÕâÑùÉùÃ÷ÁË·µ»ØÖµºó£¬const°´ÕÕ"ÐÞÊÎÔ­Ôò"½øÐÐÐÞÊΣ¬Æðµ½ÏàÓ¦µÄ±£»¤×÷Óá£

const Rational operator*(const Rational& lhs, const Rational& rhs)
{
return Rational(lhs.numerator() * rhs.numerator(),
lhs.denominator() * rhs.denominator());
}

·µ»ØÖµÓÃconstÐÞÊοÉÒÔ·ÀÖ¹ÔÊÐíÕâÑùµÄ²Ù×÷·¢Éú:

Rational a,b;
Radional c;
(a*b) = c;

Ò»°ãÓÃconstÐÞÊηµ»ØֵΪ¶ÔÏó±¾Éí£¨·ÇÒýÓúÍÖ¸Õ룩µÄÇé¿ö¶àÓÃÓÚ¶þÄ¿²Ù×÷·ûÖØÔغ¯Êý²¢²úÉúжÔÏóµÄʱºò¡£
[×ܽá] Ò»°ãÇé¿öÏ£¬º¯ÊýµÄ·µ»ØֵΪij¸ö¶ÔÏóʱ£¬Èç¹û½«ÆäÉùÃ÷Ϊconstʱ£¬¶àÓÃÓÚ²Ù×÷·ûµÄÖØÔØ¡£Í¨³££¬²»½¨ÒéÓÃconstÐÞÊκ¯ÊýµÄ·µ»ØÖµÀàÐÍΪij¸ö¶ÔÏó»ò¶Ôij¸ö¶ÔÏóÒýÓõÄÇé¿ö¡£
Ô­ÒòÈçÏ£º
Èç¹û·µ»ØֵΪij¸ö¶ÔÏóΪconst£¨const A test = A ʵÀý£©»òij¸ö¶ÔÏóµÄÒýÓÃΪconst£¨const A& test = AʵÀý£©£¬Ôò·µ»ØÖµ¾ßÓÐconstÊôÐÔ£¬Ôò·µ»ØʵÀýÖ»ÄÜ·ÃÎÊÀàAÖеĹ«ÓУ¨±£»¤£©Êý¾Ý³ÉÔ±ºÍconst³ÉÔ±º¯Êý£¬²¢ÇÒ²»ÔÊÐí¶ÔÆä½øÐи³Öµ²Ù×÷£¬ÕâÔÚÒ»°ãÇé¿öϺÜÉÙÓõ½¡£

[˼¿¼3]£º ÕâÑù¶¨Ò帳ֵ²Ù×÷·ûÖØÔغ¯Êý¿ÉÒÔÂð£¿
const A& operator=(const A& a);

ËÄ Àà³ÉÔ±º¯ÊýÖÐconstµÄʹÓÃ

Ò»°ã·ÅÔÚº¯ÊýÌåºó£¬ÐÎÈ磺void fun() const;
Èç¹ûÒ»¸ö³ÉÔ±º¯ÊýµÄ²»»áÐÞ¸ÄÊý¾Ý³ÉÔ±£¬ÄÇô×îºÃ½«ÆäÉùÃ÷Ϊconst£¬ÒòΪconst³ÉÔ±º¯ÊýÖв»ÔÊÐí¶ÔÊý¾Ý³ÉÔ±½øÐÐÐ޸ģ¬Èç¹ûÐ޸ģ¬±àÒëÆ÷½«±¨´í£¬Õâ´ó´óÌá¸ßÁ˳ÌÐòµÄ½¡×³ÐÔ¡£

Îå ʹÓÃconstµÄһЩ½¨Òé

1 Òª´óµ¨µÄʹÓÃconst£¬Õ⽫¸øÄã´øÀ´ÎÞ¾¡µÄÒæ´¦£¬µ«Ç°ÌáÊÇÄã±ØÐë¸ãÇå³þԭί£»
2 Òª±ÜÃâ×îÒ»°ãµÄ¸³Öµ²Ù×÷´íÎó£¬È罫const±äÁ¿¸³Öµ£¬¾ßÌå¿É¼û˼¿¼Ì⣻
3 ÔÚ²ÎÊýÖÐʹÓÃconstÓ¦¸ÃʹÓÃÒýÓûòÖ¸Õ룬¶ø²»ÊÇÒ»°ãµÄ¶ÔÏóʵÀý£¬Ô­ÒòͬÉÏ£»
4 constÔÚ³ÉÔ±º¯ÊýÖеÄÈýÖÖÓ÷¨£¨²ÎÊý¡¢·µ»ØÖµ¡¢º¯Êý£©ÒªºÜºÃµÄʹÓã»
5 ²»ÒªÇáÒ׵Ľ«º¯ÊýµÄ·µ»ØÖµÀàÐͶ¨Îªconst;
6³ýÁËÖØÔزÙ×÷·ûÍâÒ»°ã²»Òª½«·µ»ØÖµÀàÐͶ¨Îª¶Ôij¸ö¶ÔÏóµÄconstÒýÓÃ;


±¾ÈËˮƽÓÐÏÞ£¬»¶Ó­ÅúÆÀÖ¸Õý£¬¿ÉÒÔÁªÏµ kangjd@epri.ac.cn

[˼¿¼Ìâ´ð°¸]
1 ÕâÖÖ·½·¨²»ÕýÈ·£¬ÒòΪÉùÃ÷Ö¸ÕëµÄÄ¿µÄÊÇΪÁ˶ÔÆäÖ¸ÏòµÄÄÚÈݽøÐиı䣬¶øÉùÃ÷µÄÖ¸ÕëeÖ¸ÏòµÄÊÇÒ»¸ö³£Á¿£¬ËùÒÔ²»ÕýÈ·£»
2 ÕâÖÖ·½·¨ÕýÈ·£¬ÒòΪÉùÃ÷Ö¸ÕëËùÖ¸ÏòµÄÄÚÈݿɱ䣻
3 ÕâÖÖ×ö·¨²»ÕýÈ·£»
ÔÚconst A::operator=(const A& a)ÖУ¬²ÎÊýÁбíÖеÄconstµÄÓ÷¨ÕýÈ·£¬¶øµ±ÕâÑùÁ¬Ðø¸³ÖµµÄʱºî£¬ÎÊÌâ¾Í³öÏÖÁË£º
A a,b,c:
(a=b)=c;
ÒòΪa.operator=(b)µÄ·µ»ØÖµÊǶÔaµÄconstÒýÓ㬲»ÄÜÔÙ½«c¸³Öµ¸øconst³£Á¿¡£
ÎÄÕÂÆÀÂÛ

¹²ÓÐ 1 ÌõÆÀÂÛ

  1. ÏëÏëÖí ÓÚ 2006-09-06 16:56:29·¢±í:

    ½²µÄºÜ×Ðϸ~~