c/c++ ×óÖµ ÓÒÖµÌÖÂÛ
×óÖµÐÔ£¨lvalueness£©ÔÚC/C++ÖÐÊDZí´ïʽµÄÒ»¸öÖØÒªÊôÐÔ¡£Ö»ÓÐͨ¹ýÒ»¸ö×óÖµ±í´ïʽ²ÅÄÜÀ´ÒýÓü°¸ü¸ÄÒ»¸ö¶ÔÏó£¨object£©µÄÖµ¡££¨Ä³Ð©Çé¿öÏ£¬ÓÒÖµ±í´ïʽҲÄÜÒýÓã¨refer£©µ½Ä³Ò»¸ö¶ÔÏ󣬲¢ÇÒ¿ÉÄܼä½ÓÐ޸ĸöÔÏóµÄÖµ£¬ºóÊö£©¡£
ºÎν¶ÔÏó£¿Èç¹ûûÓÐÃ÷ȷ˵Ã÷£¬ÕâÀï˵µÄ¶ÔÏ󣬺ÍÏÁÒåµÄÀà/¶ÔÏó£¨class/object£©Ïà±È£¬¸üΪ¹ã·º¡£ÔÚC/C++ÖУ¬ËùνµÄ¶ÔÏóÖ¸µÄÊÇÖ´Ðл·¾³ÖÐÒ»¿é´æ´¢ÇøÓò£¨a region of storage£©£¬¸Ã´æ´¢ÇøÓòÖеÄÄÚÈÝÔò´ú±í£¨represent£©Á˸öÔÏóµÄÖµ£¨value£©¡£×¢Òâµ½ÎÒÃÇÕâÀïËù˵µÄ"´ú±í"£¬¶ÔÓÚÒ»¸ö¶ÔÏó£¬Èç¹ûÎÒÃÇÐèҪȡ³ö£¨fetch£©ËüµÄÖµ£¬ÄÇôÎÒÃÇÐèҪͨ¹ýÒ»¶¨µÄÀàÐÍ£¨type£©À´ÒýÓÃËü¡£Ê¹Óò»Í¬µÄÀàÐÍ£¬¶Ôͬһ¶ÔÏóÖеÄÄÚÈݵĽâÊͻᵼÖ¿ÉÄܵõ½²»Í¬µÄÖµ£¬»òÕß²úÉúijЩ䶨ÒåµÄÐÐΪ¡£
ÔÚ½éÉÜ×óֵ֮ǰ£¬ÎÒÃÇ»¹ÐèÒªÒýÈëÒ»¸ö¸ÅÄ ±äÁ¿£¨variable£©¡£¾³£ÓÐÈË»á°Ñ±äÁ¿Óë¶ÔÏó¶þÕß»ìÏý¡£Ê²Ã´½Ð±äÁ¿£¿Ëùν±äÁ¿ÊÇÒ»ÖÖÉùÃ÷£¬Í¨¹ýÉùÃ÷£¬ÎÒÃÇ°ÑÒ»¸öÃû×Ö£¨name£©ÓëÒ»¸ö¶ÔÏó¶ÔÓ¦ÆðÀ´£¬µ±ÎÒÃÇʹÓøÃÃû×Öʱ£¬¾Í±íʾÁËÎÒÃǶԸöÔÏó½øÐÐijÖÖ²Ù×÷¡£µ«ÊDz¢²»ÊÇÿ¸ö¶ÔÏó¶¼ÓÐÃû×Ö£¬Ò²²¢²»Òâζ×ÅÓжÔÓ¦µÄ±äÁ¿¡£±ÈÈçÁÙʱ¶ÔÏó£¨temporary object£©¾ÍûÓÐÒ»¸öÃû×ÖÓëÖ®¹ØÁª£¨²»ÒªÎó³ÆΪÁÙʱ±äÁ¿£¬ÕâÊDz»ÕýÈ·µÄ˵·¨£©¡£
1 CÖеÄ×óÖµ
1.1°´ÕÕCµÄ¶¨Ò壬×óÖµÊÇÒ»¸öÒýÓõ½¶ÔÏóµÄ±í´ïʽ£¬Í¨¹ý×óÖµÎÒÃÇ¿ÉÒÔÈ¡³ö¸Ã¶ÔÏóµÄÖµ¡£Í¨¹ý¿ÉÐ޸ĵÄ×óÖµ±í´ïʽ£¨modifiable lvalue£©ÎÒÃÇ»¹¿ÉÒÔÐ޸ĸöÔÏóµÄÖµ¡££¨ÐèҪ˵Ã÷µÄÊÇ£¬ÔÚC++ÖУ¬×óÖµ»¹¿ÉÒÔÒýÓõ½º¯Êý£¬¼´±í´ïʽfÈç¹ûÒýÓõÄÊǺ¯ÊýÀàÐÍ£¬ÄÇôÔÚCÖÐËü¼È²»ÊÇ×óÖµÒ²²»ÊÇÓÒÖµ£»¶øÔÚC++ÖÐÔòÊÇ×óÖµ£©¡£ÒòΪ×óÖµÒýÓõ½Ä³Ò»¶ÔÏó£¬Òò´ËÎÒÃÇʹÓÃ&¶Ô×óÖµ±í´ïʽ£¨Ò²Ö»ÄܶÔ×óÖµ±í´ïʽºÍº¯Êý£©È¡Ö·ÔËËãʱ£¬¿ÉÒÔ»ñµÃ¸Ã¶ÔÏóµÄµØÖ·£¨ÓÐÁ½ÖÖ×óÖµ±í´ïʽ²»ÄÜÈ¡Ö·£¬Ò»ÊǾßÓÐλÓò£¨ bit-field £©ÀàÐÍ£¬ÒòΪʵÏÖÖÐ×îСѰַµ¥Î»ÊÇ byte£»ÁíÒ»¸öÊǾßÓÐregisterÖ¸¶¨·û£¬Ê¹ÓÃregisterÐÞÊεıäÁ¿±àÒëÆ÷¿ÉÄÜ»áÓÅ»¯µ½¼Ä´æÆ÷ÖУ©¡£
Ex1.1
char a[10]; // a is an lvalue representing an array of 10 ints.
char (* p)[10]=&a; // &a is the address of the array a.
const char* p="hello world"; //"hello world" is an lvalue of type char[12]
&
Ïà¹ØÎĵµ£º
µÚÒ»²¿·ÖÈí¼þ±à³ÌµÄʱ¼ä·ÖÅä¸Å¿ö
¸ßЧÂʵijÌÐòÔ±²¢²»ÊÇÇüüÅ̵ÄËٶȱȱðÈ˿죬¶øÊÇËûÓÐ×ÅÁ¼ºÃµÄ±à³ÌÏ°¹ß£¬½ÚÊ¡Á˱ðÈËÀ˷ѵÄʱ¼ä¡£Òò´Ë£¬ÒªÏëÌá¸ß×Ô¼ºµÄ±à³ÌЧÂÊ£¬¸ù±¾ÔÚÓÚÔõôÉÙÀË·Ñʱ¼ä¡£Ö»ÒªÄܰѱðÈËÀ˷ѵÄʱ¼ä½ÚÊ¡ÏÂÀ´£¬ÄãµÄЧÂʾͿÉÒÔ¿ì¹ý±ðÈË£¬ÉõÖÁÊý±¶ÓÚ±ðÈË¡£ÒªÏë½Úʡʱ¼ä£¬µ±È»Ê×ÏÈÐèÒªÃ÷°×±à³ÌÖкķ ......
1. C++ËäÈ»Ö÷ÒªÊÇÒÔCµÄ»ù´¡·¢Õ¹ÆðÀ´µÄÒ»ÃÅÐÂÓïÑÔ£¬µ«Ëý²»ÊÇCµÄÌæ´úÆ·£¬²»ÊÇCµÄÉý¼¶£¬C++ºÍCÊÇÐֵܹØϵ¡£Ã»ÓÐ˱ÈËÏȽøµÄ˵·¨£¬¸üÖØÒªµÄÒ»µãÊÇCºÍC++¸÷×Եıê׼ίԱ»áÊǶÀÁ¢µÄ£¬×îеÄC++±ê×¼ÊÇC++98£¬×îеÄC±ê×¼ÊÇC99¡£Òò´ËҲûÓÐÏÈѧCÔÙ˵C++µÄ˵·¨£¬Ò²²»ÔÙ£¨×¢ÒâÕâ¸ö"²»ÔÙ"£©ÓÐC++Óï·¨ÊÇCÓï·¨µÄ³¬¼¯µÄ˵·¨¡£
2. C++/CL ......
µ±Òª½»»»Á½¸öÊýµÄֵʱ£¬Í¨³£µÄ×ö·¨ÊǶ¨ÒåÒ»¸öÁÙʱ±äÁ¿£¬È»ºóÔÙ½øÐн»»»¡£ÄÇôÄܲ»Äܲ»ÓÃÁÙʱ±äÁ¿¶ø½»»»Á½¸öÊýµÄÖµÄØ£¿¿ÉÒԵģ¡CÓïÑÔÌṩµÄÒì»òÔËËã¾Í¿ÉÒÔʵÏÖÕâÑùµÄ²Ù×÷¡£
Òì»òÔËËã·û^Ò²³ÆXORÔËËã·û£¬ËüµÄ¹æÔòÊÇÈô²Î¼ÓÔËËãµÄÁ½¸ö¶þ½øλͬºÅ£¬Ôò½á¹ûΪ0£¨¼Ù£©£»ÒìºÅΪ1£¨Õ棩¡£¼´0 ^ 0 = 0, 0 ^ 1 = 1, 1 ^ 0 = 1, ......
Í·ÎļþµÄ×÷ÓÃ
ÔçÆڵıà³ÌÓïÑÔÈçBasic¡¢Fortran ûÓÐÍ·ÎļþµÄ¸ÅÄC++/C ÓïÑԵijõѧÕßËäÈ»»áÓÃʹÓÃÍ·Îļþ£¬µ«³£³£²»Ã÷ÆäÀí¡£ÕâÀï¶ÔÍ·ÎļþµÄ×÷ÓÃÂÔ×÷½âÊÍ£º
£¨1£©Í¨¹ýÍ·ÎļþÀ´µ÷Óÿ⹦ÄÜ¡£ÔںܶೡºÏ£¬Ô´´úÂë²»±ã£¨»ò²»×¼£©ÏòÓû§¹«²¼£¬Ö»ÒªÏòÓû§ÌṩͷÎļþºÍ¶þ½øÖƵĿ⼴¿É¡£Óû§Ö»ÐèÒª°´ÕÕÍ·ÎļþÖеĽӿÚÉùÃ÷À´µ÷Óÿ⹦ ......
Ò»¡¢
1¡¢¹ØÓÚ×Ö½Ú˳Ðò£º»°ËµÔÚÌض¨µÄÓ²¼þƽ̨ÉÏ£¬¶à×Ö½ÚÊý¾ÝµÄ˳Ðò´æ·ÅÓÐÁ½ÖÖ·½Ê½£¨little-endian¡¢big-endian£©¡£Ç°ÕßµÄÊý¾ÝµÄµÍ×Ö½Ú
²¿·Ö´æ·ÅÔڵ͵ØÖ·Äڴ棬ºóÕßÇ¡ºÃÏà·´¡£PCÒ»°ãÊÇ»ùÓÚIA-32΢´¦ÀíÆ÷£¬ÊôÓÚlittle-endian¡£Ä³Ð©RISC¼Ü¹¹µÄCPU£¬ÀýÈçSPARC¡¢
POWERPCµÈ£¬ÔòÊ ......