﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-海的空间</title><link>http://www.cppblog.com/hai/</link><description /><language>zh-cn</language><lastBuildDate>Wed, 08 Apr 2026 02:40:41 GMT</lastBuildDate><pubDate>Wed, 08 Apr 2026 02:40:41 GMT</pubDate><ttl>60</ttl><item><title>对operator&amp;的疑惑</title><link>http://www.cppblog.com/hai/archive/2010/07/28/121489.html</link><dc:creator>海的空间</dc:creator><author>海的空间</author><pubDate>Wed, 28 Jul 2010 11:23:00 GMT</pubDate><guid>http://www.cppblog.com/hai/archive/2010/07/28/121489.html</guid><wfw:comment>http://www.cppblog.com/hai/comments/121489.html</wfw:comment><comments>http://www.cppblog.com/hai/archive/2010/07/28/121489.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/hai/comments/commentRss/121489.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/hai/services/trackbacks/121489.html</trackback:ping><description><![CDATA[
		<p>最近几天在研究boost库，当看到addressof()函数时，碰到一个问题：<br /><span style="FONT-FAMILY: 宋体; FONT-SIZE: 10.5pt; mso-bidi-font-size: 11.0pt; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">当重载</span><span style="FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 10.5pt; mso-bidi-font-size: 11.0pt; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体" lang="EN-US">operator&amp;</span><span style="FONT-FAMILY: 宋体; FONT-SIZE: 10.5pt; mso-bidi-font-size: 11.0pt; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">时，它的语义肯定会与大多数用户所期望的不同，即函数返回的可能不是用户所期望的地址值。比如下面的例子：<br />class A <br />{<br />public:<br /> void test()<br /> {<br />  std::cout&lt;&lt;"easy"&lt;&lt;std::endl;<br /> }<br /> A* operator&amp; ()const<br /> {<br />  return 0;<br /> }<br />};</span></p>
		<p>
				<span style="FONT-FAMILY: 宋体; FONT-SIZE: 10.5pt; mso-bidi-font-size: 11.0pt; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">int main()<br />{<br /> <br />   A a;<br />   A *p;<br />   p = &amp;a;<br />   p-&gt;test();<br />   system("pause");<br />   return 0;<br />}<br /><br />但令我奇怪的是，上面的程序竟然能顺利运行！因为我在单步运行的时候，发现p的值时0x00000000。<br />p不是空指针吗？但它却能调用test()。<br />经过几日的思考，加上几位高人的指点。我叙述一下原因：<br />类A的test函数地址跟成员变量并不是连续存放在一个内存空间里。test函数在在编译main函数的实现文件编译的时候<br />test函数已经在main函数obj文件生成了！所以，只要确定了p指向的类型，就可以调用test（），还有另外一个原因就是test（）<br />test（）没有调用类Ａ的成员变量，所以p-&gt;test()是可以调用。<br /><br />希望大虾们继续指点～～<br /></span>
		</p>
<img src ="http://www.cppblog.com/hai/aggbug/121489.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/hai/" target="_blank">海的空间</a> 2010-07-28 19:23 <a href="http://www.cppblog.com/hai/archive/2010/07/28/121489.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>