草庐IT

c++ - C 标准库的(其余部分)未涵盖 C 标准库的哪些部分?

coder 2024-02-01 原文

The C++ library includes the same definitions as the C language library

但 C++ 库似乎在非 C 库头文件中复制(/扩展)了 C 库的某些功能。比如C库有,C++库有; C 库有 ,C+ 库有

如果我需要一个字符串类,我假设我最好使用 而不是 ,因为 可以受益于 C++ 中的所有非 C 功能(例如异常)。但是 C 库中有一些功能在 C++ 库中没有以任何其他形式存在。例如,我在 之外找不到像 memcpy 和 memcmp 这样的东西。

C 库的哪些部分在非 C 库头文件中没有类似物?

(如果 C++ 标准的版本对此很重要,我对 C++11 感兴趣。)

最佳答案

标题不多,所以我们只列出它们。有些可以被语言设施取代,而不是图书馆。 (我没有列举每个头文件中的每个函数,所以我可能错过了大多数同事都没有 C++ 替代品的奇怪函数。)

C library         C++ alternatives
assert.h          Exceptions
complex.h         <complex>
ctype.h           None (or maybe <locale>, if you want to jump down that rabbit-hole)
errno.h           None (but only applies to C functions)
fenv.h            None
float.h           <limits>
inttypes.h        (See breakdown)
   formatting     <iostream>
   strto...       <string> (C++11), <sstream>
   imaxabs        std::abs overloads
   imaxdiv        std::div overloads
iso646.h          Language
locale.h          <locale>
math.h            None (extended with C++ overloads)
setjmp.h          Exceptions
signal.h          None
stdarg.h          Variadic templates (C++11)
stdbool.h         Language
stddef.h          None
stdint.h          None
stdio.h           <iostream> etc.
stdlib.h          (See breakdown)
   atof etc.      <sstream>, <string> (C++11)
   rand etc.      <random> (C++11)
   malloc etc.    new, containers
   abort etc.     None
   bsearch etc.   <algorithm>
   abs etc.       None (extended with C++ overloads)
   mb strings     None
string.h          <string>, <algorithm>
tgmath.h          <cmath> (C++ overloads)
time.h            <chrono> (C++11)
wchar.h           <iostream> etc.
wctype.h          None

总结一下:

Which parts of the C library have no analogue in the non-C-library headers?

[w]ctype.h, errno.h, fenv.h, fenv.h, math.hsignal.hstddef.hstdint.h、部分stdlib .h。在 C++11 之前,还有 stdarg.htime.h 和更多的 stdlib.h

关于c++ - C 标准库的(其余部分)未涵盖 C 标准库的哪些部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22269370/

有关c++ - C 标准库的(其余部分)未涵盖 C 标准库的哪些部分?的更多相关文章

  1. ruby-on-rails - 如何优雅地重启 thin + nginx? - 2

    我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server

  2. ruby - 将 spawn() 的标准输出/标准错误重定向到 Ruby 中的字符串 - 2

    我想使用spawn(针对多个并发子进程)在Ruby中执行一个外部进程,并将标准输出或标准错误收集到一个字符串中,其方式类似于使用Python的子进程Popen.communicate()可以完成的操作。我尝试将:out/:err重定向到一个新的StringIO对象,但这会生成一个ArgumentError,并且临时重新定义$stdxxx会混淆子进程的输出。 最佳答案 如果你不喜欢popen,这是我的方法:r,w=IO.pipepid=Process.spawn(command,:out=>w,:err=>[:child,:out])

  3. ruby-on-rails - 标准化文件名的字符串,删除重音和特殊字符 - 2

    我正在尝试找到一种方法来规范化字符串以将其作为文件名传递。到目前为止我有这个:my_string.mb_chars.normalize(:kd).gsub(/[^\x00-\x7F]/n,'').downcase.gsub(/[^a-z]/,'_')但第一个问题:-字符。我猜这个方法还有更多问题。我不控制名称,名称字符串可以有重音符、空格和特殊字符。我想删除所有这些,用相应的字母('é'=>'e')替换重音符号,并将其余的替换为'_'字符。名字是这样的:“Prélèvements-常规”“健康证”...我希望它们像一个没有空格/特殊字符的文件名:“prelevements_routin

  4. ruby - 使用 `+=` 和 `send` 方法 - 2

    如何将send与+=一起使用?a=20;a.send"+=",10undefinedmethod`+='for20:Fixnuma=20;a+=10=>30 最佳答案 恐怕你不能。+=不是方法,而是语法糖。参见http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html它说Incommonwithmanyotherlanguages,Rubyhasasyntacticshortcut:a=a+2maybewrittenasa+=2.你能做的最好的事情是:

  5. ruby - 如何计算 Liquid 中的变量 +1 - 2

    我对如何计算通过{%assignvar=0%}赋值的变量加一完全感到困惑。这应该是最简单的任务。到目前为止,这是我尝试过的:{%assignamount=0%}{%forvariantinproduct.variants%}{%assignamount=amount+1%}{%endfor%}Amount:{{amount}}结果总是0。也许我忽略了一些明显的东西。也许有更好的方法。我想要存档的只是获取运行的迭代次数。 最佳答案 因为{{incrementamount}}将输出您的变量值并且不会影响{%assign%}定义的变量,我

  6. ruby-on-rails - 您希望看到哪些 Rails 插件? - 2

    您认为可以作为插件很好地存在于您的Rails应用程序中必须实现的哪些行为?您过去曾搜索过哪些插件功能但找不到?哪些现有的Rails插件可以改进或扩展,如何改进或扩展? 最佳答案 我希望在管理界面中看到一个引擎插件,它提供了应用程序中所有模型的仪表板摘要,以及可配置的事件图表。 关于ruby-on-rails-您希望看到哪些Rails插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questio

  7. arrays - Ruby 数组 += vs 推送 - 2

    我有一个数组数组,想将元素附加到子数组。+=做我想做的,但我想了解为什么push不做。我期望的行为(并与+=一起工作):b=Array.new(3,[])b[0]+=["apple"]b[1]+=["orange"]b[2]+=["frog"]b=>[["苹果"],["橙子"],["Frog"]]通过推送,我将推送的元素附加到每个子数组(为什么?):a=Array.new(3,[])a[0].push("apple")a[1].push("orange")a[2].push("frog")a=>[[“苹果”、“橙子”、“Frog”]、[“苹果”、“橙子”、“Frog”]、[“苹果”、“

  8. Ruby:标准递归模式 - 2

    我经常迷上ruby​​的一件事是递归模式。例如,假设我有一个数组,它可能包含无限深度的数组作为元素。所以,例如:my_array=[1,[2,3,[4,5,[6,7]]]]我想创建一个方法,可以将数组展平为[1,2,3,4,5,6,7]。我知道.flatten可以完成这项工作,但这个问题是作为我经常遇到的递归问题的一个例子-因此我试图找到一个更可重用的解决方案。简而言之-我猜这种事情有一个标准模式,但我想不出任何特别优雅的东西。任何想法表示赞赏 最佳答案 递归是一种方法,它不依赖于语言。您在编写算法时要考虑两种情况:再次调用函数的情

  9. ruby-on-rails - 使用 Ruby 标准 Logger 每天只创建一个日志 - 2

    我正在使用ruby​​标准记录器,我想要每天轮换一次,所以在我的代码中我有:Logger.new("#{$ROOT_PATH}/log/errors.log",'daily')它运行完美,但它创建了两个文件errors.log.20130217和errors.log.20130217.1。如何强制它每天只创建一个文件? 最佳答案 您的代码对于长时间运行的应用程序是正确的。发生的事情是您在给定的一天多次运行代码。第一次运行时,Ruby会创建一个日志文件“errors.log”。当日期改变时,Ruby将文件重命名为“errors.log

  10. += 的 Ruby 方法 - 2

    有没有办法让Ruby能够做这样的事情?classPlane@moved=0@x=0defx+=(v)#thisiserror@x+=v@moved+=1enddefto_s"moved#{@moved}times,currentxis#{@x}"endendplane=Plane.newplane.x+=5plane.x+=10putsplane.to_s#moved2times,currentxis15 最佳答案 您不能在Ruby中覆盖复合赋值运算符。任务在内部处理。您应该覆盖+,而不是+=。plane.a+=b与plane.a=

随机推荐