|
发表于 2005-9-11 22:41:58
|
显示全部楼层
Post by JBug
是不是由于这个原因呀:
语句:
cout<<x<<endl;
是采用
operator << (ostream&, X)
的形式调用的.
是的.
而X中的成员函数
operator << (ostream&)
会展开成
operator << (*this, ostream)
的形式.
这个就不一定了,这个与编译器有关,gcc确实是这么做的(不过第一个参数是this,而不是*this),下面的例子:
- [rick@Fedora-Core test]$ cat test.cc
- #include <iostream>
- #include <fstream>
- using namespace std;
- class C
- {
- public:
- void f()
- {
- printf("haha\n");
- }
- };
- int main(int argc,char** argv)
- {
- C c;
- c.f();
- return 0;
- }
复制代码
- 080486ae <main>:
- 80486ae: 55 push %ebp
- 80486af: 89 e5 mov %esp,%ebp
- 80486b1: 83 ec 08 sub $0x8,%esp
- 80486b4: 83 e4 f0 and $0xfffffff0,%esp
- 80486b7: b8 00 00 00 00 mov $0x0,%eax
- 80486bc: 83 c0 0f add $0xf,%eax
- 80486bf: 83 c0 0f add $0xf,%eax
- 80486c2: c1 e8 04 shr $0x4,%eax
- 80486c5: c1 e0 04 shl $0x4,%eax
- 80486c8: 29 c4 sub %eax,%esp
- 80486ca: 83 ec 0c sub $0xc,%esp
- 80486cd: 8d 45 ff lea 0xffffffff(%ebp),%eax
- 80486d0: 50 push %eax
- 80486d1: e8 7a 00 00 00 call 8048750 <_ZN1C1fEv>
- 80486d6: 83 c4 10 add $0x10,%esp
- 80486d9: b8 00 00 00 00 mov $0x0,%eax
- 80486de: c9 leave
- 80486df: c3 ret
复制代码
以前看过VC生成的汇编,却不是这个样子的. |
|