在Effective C++一书中,我看到了以下段落:
结果,如果你写
class Empty{};
它基本上和你写的一样:
class Empty { public: Empty() { ... } Empty(const Empty& rhs) { ... } ~Empty() { ... } Empty& operator=(const Empty& rhs) { ... } // copy assignment operator };
以下代码将导致生成每个函数:
Empty e1; Empty e2(e1); e2 = e1;
但是在反汇编上面的代码生成的可执行文件后,我意识到不是这样:没有任何函数被调用。
这是主要的汇编代码:
00000000004006cd <main>:
4006cd: 55 push %rbp
4006ce: 48 89 e5 mov %rsp,%rbp
4006d1: b8 00 00 00 00 mov $0x0,%eax
4006d6: 5d pop %rbp
4006d7: c3 retq
该.text
段中没有任何名为“Empty”的函数。
那么在我们调用构造函数或空类赋值之后,编译器的行为究竟是什么?它是否像书中所说的那样产生一些功能?如果是这样,它们存储在哪里?