让我们考虑下面 C 和 C + + 中的 hello world 示例:
#include <stdio.h>
int main()
{
printf("Hello world\n");
return 0;
}
#include <iostream>
int main()
{
std::cout<<"Hello world"<<std::endl;
return 0;
}
当我把它们在 Godbolt 中编译成汇编语言时,C 代码的大小只有9行(gcc -O3) :
.LC0:
.string "Hello world"
main:
sub     rsp, 8
mov     edi, OFFSET FLAT:.LC0
call    puts
xor     eax, eax
add     rsp, 8
ret
但是 C + + 代码的大小是22行(g++ -O3) :
.LC0:
.string "Hello world"
main:
sub     rsp, 8
mov     edx, 11
mov     esi, OFFSET FLAT:.LC0
mov     edi, OFFSET FLAT:_ZSt4cout
call    std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, long)
mov     edi, OFFSET FLAT:_ZSt4cout
call    std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)
xor     eax, eax
add     rsp, 8
ret
_GLOBAL__sub_I_main:
sub     rsp, 8
mov     edi, OFFSET FLAT:_ZStL8__ioinit
call    std::ios_base::Init::Init() [complete object constructor]
mov     edx, OFFSET FLAT:__dso_handle
mov     esi, OFFSET FLAT:_ZStL8__ioinit
mov     edi, OFFSET FLAT:_ZNSt8ios_base4InitD1Ev
add     rsp, 8
jmp     __cxa_atexit
... 比这个大得多。
众所周知,在 C + + 中,你要为你吃的东西付钱。那么,在这种情况下,我要付出什么?
 
                                
                             
                                
                             
                                
                             
                                
                             
                                
                             
                                
                             
                                
                             
                                
                             
                                
                             
                                
                             
                                
                             
                                
                            