Justme0 的博客

撷英采华,以备不需

【译】什么是C/C++标准库

原文:https://www.internalpointers.com/post/c-c-standard-library on Apr 9, 2018 by TRIANGLES

译者序:这篇文章介绍了C/C++标准库在标准中的说明及各平台的实现,作者查阅了很多资料,对梳理标准库概念有所帮助,最后一段还提到一个有意思的比赛 : )

引言:本文简要介绍了C/C++开发领域中标准库所扮演的角色,以及标准库在各操作系统中是如何实现的。

使用C++有一段时间了,一开始经常让我困惑的是其内部原理:我使用的核心函数和类来自哪里?是谁写的?它们打包放在我电脑上什么地方?是否有一份官方手册

本文通过介绍C/C++语言本身到其实现来回答这些问题。

C/C++怎么产生的

平常我们谈论的C/C++其实是指一个规则的集合,它定义了语言该做什么、应该表现成怎样以及提供的功能。C/C++编译器必须遵从这些规则来处理源程序并生成二进制应用程序。这看起来与HTML挺相近:浏览器遵从一组指示符来渲染网页。

与HTML一样,C/C++规则也是理论上的。国际标准化组织(ISO)中有一部分人每年聚集在一块讨论语言的规则并记入文档。是的,C和C++是经过标准化了的。最终他们会编写一本叫标准的官方手册,可以在官网上买到。每次随着语言发展,会出版一本新的标准文档。所以大家会看到不同的C/C++版本:C99, C11, C++03, C++11, C++14等等,其中的数字表示出版年份。

标准是份及其详细的技术文档:反正我不会拿它用于手头使用。标准分两部分:

观《锵锵三人行》有感

这两天的《锵锵三人行》特别精彩,嘉宾是收藏家马未都和记者周轶君,加上主持人窦文涛,他们三个人探讨了现在的社会问题。事件是最近深圳市一个十几岁的自闭症小孩走丢了,走到东莞去了,中间经公安局、医院辗转送至韶关下面一个县的托养中心,最后在这个托养中心死了。问题是这个托养中心是民办的、盈利性的,政府管不了很多流浪者,以六百块钱一个人头让私人管,而这个托养中心的财务又与一个当地政府官员有关系。所以是政府为了公共事业出的钱最后到了政府中的私人口袋里。

首先,托养中心是民办的,这就会出问题,老板要赚钱,他对托养中心里弱势群体的救助政府很难监督到位,这个托养中心去年送到火葬场的就有两百多人,事件中的那个男孩就是这个情况,他的父亲说走丢时是130斤,最后是骨瘦如柴。

读书记录

正在读

读过

想读

(End)

函数式编程与 C++

这个学期学了一门函数式语言 Coq,是法国人发明的,它与 ML 很像,其实 Coq 的发明主要是受了 ML 的影响。Coq 的语法我就不在这叙述了,有兴趣的朋友可以看这本书 Software Foundations,也就是我们上课用的教材。下面直接看些例子吧。

1. map

它的功能与 C++ 中的std::transform算法类似,是将f作用在list中的每个元素(元素类型是X)上,返回一个list(元素类型是Y),其中f是一元函数,形参类型是X,返回值类型是Y。有一点得注意,这里的maplist与 STL 中的容器无关,因为 Coq 的源程序中是这么命名的,所以我就沿用了。

Fixpoint map {X Y:Type} (f:X->Y) (l:list X)
             : (list Y) :=
  match l with
  | []     => []
  | h :: t => (f h) :: (map f t)
  end.

我突发奇想,用 C++ 实现了上面的功能。程序如下。

C++ 中的 Lambda 表达式

前些天买了本《程序设计语言理论》,看了简介,Lambda 演算贯穿整个理论,尤其在函数式语言中具有重要作用。C++11 中也加入了 Lambda 表达式,下面做个总结。


1. 一个简单的例子

一个简单的 Lambda 表达式如下:

[] {};

这就定义了一个对象,这个对象匿名,再强调一下,Lambda 表达式是对象,不是类型。本例中,该对象的类型是 ‘anonymous-namespace’::<lambda0>,这是编译器给它设的一个类型名。

2. 实现

一般地,编译器实现 Lambda 表达式时,将其转化为函数对象(仿函数 functor)。比如上面的例子将转化为