gpt4 book ai didi

c++ - 在 C++ 中,我是否为我不吃的东西买单?

转载 作者:IT老高 更新时间:2023-10-28 11:29:23 25 4
gpt4 key购买 nike

让我们考虑以下 C 和 C++ 中的 hello world 示例:

main.c

#include <stdio.h>

int main()
{
printf("Hello world\n");
return 0;
}

main.cpp

#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++ 中,您为所吃的东西付费。那么,在这种情况下,我要支付什么费用?

最佳答案

So, in this case, what am I paying for?

std::coutprintf 更强大更复杂.它支持语言环境、有状态格式标志等。

如果您不需要这些,请使用 std::printfstd::puts - 它们在 <cstdio> 中可用.


It is famous that in C++ you pay for what you eat.

我还想明确指出,C++ != C++ 标准库。标准库应该是通用的并且“足够快”,但它通常比您需要的专门实现要慢。

另一方面,C++ 语言努力使编写代码成为可能,而无需支付不必要的额外隐藏成本(例如,选择加入 virtual,没有垃圾收集)。

关于c++ - 在 C++ 中,我是否为我不吃的东西买单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52442415/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com