蚊章汇 - C++
type: channel
link: https://linuxcn.bwsl.wang/tag/C%2B%2B/
items: 助你掌握 C++ 编程的九本开源书籍
items: C++ 程序员 Protocol Buffers 基础指南
items: 17 个 Linux 下用于 C/C++ 的最好的 IDE /编辑器

助你掌握 C++ 编程的九本开源书籍
type: item
date: 2017-03-01T18:43:00+08:00
description: 书籍是非常主观和私人的财产，编程书籍也不例外。但是不管 C++ 编程书籍的风格、关注点或者节奏如何，好书总可以带领读者走过一段引人入胜的旅程，揭示编程语言的能力，还能向读者描绘如何使用编程语言来实现各种事物。分享是一种美德，我精心挑选了九本值得一读的优质 C++ 书籍，这些书籍均基于开源协议发布。在这之前，我会给出一份 C++ 的简短介绍。C++ 是由 Bjarne Stroustrup 设计，初次发布于 1983 年。它是一种静态类型、格式自由、多重范式、可移植、编译式的通用编程语言。它被认为是中级语言，同时包含有高级与初级编程语言的特性。C++ 设计用于实现系统级与应用的编程，它拓展了 C 编程语言，因此其名字中的使用了自增运算符 ++。C++ 仍是一种流行的编程语言。例如，它被广泛应用于嵌入式系统、银行以及通讯业。它作为 C 的超集保留了 C 标志性的简洁与高效，同时提供强类型检查、多重继承、数据抽象、异常处理操作符重载、泛型编程，以及面向对象编程等功能。C++ 不仅影响了 C 语言的发展，同时也影响到了包括 C#、Java 在内的许多其他编程语言。《 Boost C++ 类库 （ The Boost C++ Libraries ） 》作者 Boris Schäling (570页)《 Boost C++ 类库 （ The Boost C++ Libraries ） 》被认为在 C++ 世界中极其重要并有深远影响。书中这些可移植的库提供对多种任务和结构体的支持，包括多线程、容器、字符串和文本处理、迭代器、线性代数、伪随机数产生、元程序设计模板、并发程序设计、数据结构、图像处理、正则表达式和单元测试。Boost 可以在几乎所有现代操作系统上工作，包括 Linux 和 Windows 及其衍生，并且支持绝大多数现代编译器。这本书介绍了 72 个 Boost 库，提供了广泛并且实用的功能。它们能够帮助程序员更轻松的管理内存和处理字符串。这些库提供多种容器以及其它数据结构来拓展标准库。使用这些库可以轻松实现平台无关的网络应用程序。本书是一颗值得添加到各类收藏中的明珠。430 份源代码例子生动形象地阐释了这些库的功能。本书前面的章节审视了内存管理、字符串处理、容器、数据结构、算法、通信、文件与流以及时间。后续章节进一步探索了函数式编程、并行编程和泛型编程。以对语言拓展、错误与数字处理、应用程序库、设计模式以及其他库的大部分内容。本书采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。如果你喜欢实体书，可以在亚马逊上购买纸质书，也可选择如 kindle、E-book 和 PD F格式的电子书。《 C++ 注释 （ C++ Annotations ） 》作者 Frank B. Brokken (1029页)《 C++ 注释 （ C++ Annotations ） 》提供了关于 C++ 编程语言的一份全面的教程。它可以被当做一门 C++ 课程的教材。本书面向已掌握 C 语言或其他类 C 语法知识的使用者。本书主要章节有：命名空间字符串——C 提供的是最基础的字符串支持I/O 流库——提供了一个基于类概念的输入/输出库类——C 提供了两种结构化不同类型数据的方法。C 语言的结构体包含多种类型的数据成员，而 C 语言的 共用体 （ union ） 同样可以定义不同类型的数据成员。本章介绍的类，也是一种结构体但是它的内容对外部世界来说是默认不可访问的。静态数据和函数内存管理——审视 C++ 中能够操作内存分配的操作符异常——允许 C++ 程序执行受控的非本地返回命令，避免了使用 longjmp（非局部跳转）和 setjmp（激活非局部跳转）函数的缺陷。操作符重载——介绍通用的操作符重载抽象容器继承——派生的另外一个特性。 本章演示基类指针可能被用来指向派生类的对象。多态——继承的一种特殊形态友元机制——介绍 friend 关键词以及它的使用原则成员指针——定义成员指针及其用法，静态成员指针，指针长度嵌套类——当嵌套类与其外围类有概念上的紧密联系时会被使用标准模板库（STL）——包含容器、通用算法、迭代器、函数对象、分配器、适配器和数据结构的通用库。这些算法使用的数据结构都是抽象意义的，因此算法实际上可以使用任何数据类型。泛型算法——涵盖标准模板库中的泛型算法函数模板——探索模板独特的句法。介绍模板类型参数与模板非类型参数和函数模板等概念并且提供模板的多个案例。类模板——讨论构建与使用类模板进阶模板用法——一份简短的模板元编程主要特性与模板的微妙关系的介绍本书有HTML、PDF、PostScript 和 txt 版本。它可以自由分发，基于 GNU GPL 协议发布。《 通过 C++ 和 Qt4 了解设计模式 （ An Int…

C++ 程序员 Protocol Buffers 基础指南
type: item
date: 2016-11-04T18:37:00+08:00
description: 这篇教程提供了一个面向 C++ 程序员关于 protocol buffers 的基础介绍。通过创建一个简单的示例应用程序，它将向我们展示：在 .proto 文件中定义消息格式使用 protocol buffer 编译器使用 C++ protocol buffer API 读写消息这不是一个关于在 C++ 中使用 protocol buffers 的全面指南。要获取更详细的信息，请参考 Protocol Buffer Language Guide 和 Encoding Reference。为什么使用 Protocol Buffers我们接下来要使用的例子是一个非常简单的"地址簿"应用程序，它能从文件中读取联系人详细信息。地址簿中的每一个人都有一个名字、ID、邮件地址和联系电话。如何序列化和获取结构化的数据？这里有几种解决方案：以二进制形式发送/接收原生的内存数据结构。通常，这是一种脆弱的方法，因为接收/读取代码必须基于完全相同的内存布局、大小端等环境进行编译。同时，当文件增加时，原始格式数据会随着与该格式相关的软件而迅速扩散，这将导致很难扩展文件格式。你可以创造一种 ad-hoc 方法，将数据项编码为一个字符串——比如将 4 个整数编码为 12:3:-23:67。虽然它需要编写一次性的编码和解码代码且解码需要耗费一点运行时成本，但这是一种简单灵活的方法。这最适合编码非常简单的数据。序列化数据为 XML。这种方法是非常吸引人的，因为 XML 是一种适合人阅读的格式，并且有为许多语言开发的库。如果你想与其他程序和项目共享数据，这可能是一种不错的选择。然而，众所周知，XML 是空间密集型的，且在编码和解码时，它对程序会造成巨大的性能损失。同时，使用 XML DOM 树被认为比操作一个类的简单字段更加复杂。Protocol buffers 是针对这个问题的一种灵活、高效、自动化的解决方案。使用 Protocol buffers，你需要写一个 .proto 说明，用于描述你所希望存储的数据结构。利用 .proto 文件，protocol buffer 编译器可以创建一个类，用于实现对高效的二进制格式的 protocol buffer 数据的自动化编码和解码。产生的类提供了构造 protocol buffer 的字段的 getters 和 setters，并且作为一个单元来处理读写 protocol buffer 的细节。重要的是，protocol buffer 格式支持格式的扩展，代码仍然可以读取以旧格式编码的数据。在哪可以找到示例代码示例代码被包含于源代码包，位于“examples”文件夹。可在这里下载代码。定义你的协议格式为了创建自己的地址簿应用程序，你需要从 .proto 开始。.proto 文件中的定义很简单：为你所需要序列化的每个数据结构添加一个 消息 （ message ） ，然后为消息中的每一个字段指定一个名字和类型。这里是定义你消息的 .proto 文件 addressbook.proto。package tutorial; message Person { required string name = 1; required int32 id = 2; optional string email = 3; enum PhoneType { MOBILE = 0; HOME = 1; WORK = 2; } message PhoneNumber { required string number = 1; optional PhoneType type = 2 [default = HOME]; } repeated PhoneNumber phone = 4; } message AddressBook { repeated Person person = 1; } 如你所见，其语法类似于 C++ 或 Java。我们开始看看文件的每一部分内容做了什么。.proto 文件以一个 package 声明开始，这可以避免不同项目的命名冲突。在 C++，你生成的类会被置于与 package 名字一样的命名空间。下一步，你需要定义 消息 （ message ） 。消息只是一个包含一系列类型字段的集合。大多标准的简单数据类型是可以作为字段类型的，包括 bool、int32、float、double 和 string。你也可以通过使用其他消息类型作为字段类型，将更多的数据结构添加到你的消息中——在以上的示例，Person 消息包含了 PhoneNumber 消息，同时 AddressBook 消息包含 Person 消息。你甚至可以定义嵌套在其他消息内的消息类型——如你所见，PhoneNumber 类型定义于 Person 内部。如果你…

17 个 Linux 下用于 C/C++ 的最好的 IDE /编辑器
type: item
date: 2016-08-22T02:20:00+08:00
description: C++，一个众所周知的 C 语言的扩展，是一个优秀的、强大的、通用编程语言，它能够提供现代化的、通用的编程功能，可以用于开发包括视频游戏、搜索引擎、其他计算机软件乃至操作系统等在内的各种大型应用。C++，提供高度可靠性的同时还能够允许操作底层内存来满足更高级的编程要求。虽然已经有了一些供程序员用来写 C/C++ 代码的文本编辑器，但 IDE 可以为轻松、完美的编程提供综合的环境和组件。在这篇文章里，我们会向你展示一些可以在 Linux 平台上找到的用于 C++ 或者其他编程语言编程的最好的 IDE。 1. 用于 C/C++ 开发的 NetbeansNetbeans 是一个自由而开源的、流行的跨平台 IDE ，可用于 C/C++ 以及其他编程语言，可以使用由社区开发的插件展现了其完全的扩展性。它包含了用于 C/C++ 开发的项目类型和模版，并且你可以使用静态和动态函数库来构建应用程序。此外，你可以利用现有的代码去创造你的工程，并且也可以通过拖放的方式导入二进制文件来从头构建应用。让我们来看看关于它的特性：C/C++ 编辑器很好的整合了多线程的 GNU GDB 调试工具支持代码协助支持 C++11 标准在里面创建和运行 C/C++ 测试程序支持 QT 工具包支持将已编译的应用程序自动打包到 .tar，.zip 等归档文件支持多个编译器，例如： GNU、Clang/LLVM、Cygwin、Oracle Solaris Studio 和 MinGW支持远程开发文件导航源代码检查主页：https://netbeans.org/features/cpp/index.html2. Code::BlocksCode::Blocks 是一个免费的、具有高度扩展性的、并且可以配置的跨平台 C++ IDE，它为用户提供了必备而典范的功能。它具有一致的界面和体验。最重要的是，你可以通过用户开发的插件扩展它的功能，一些插件是随同 Code::Blocks 发布的，而另外一些则不是，它们由 Code::Block 开发团队之外的个人用户所编写的。其功能分为编译器、调试器、界面功能，它们包括：支持多种编译器如 GCC、clang、Borland C++ 5.5、digital mars 等等非常快，不需要 makefile支持多个目标平台的项目支持将项目组合起来的工作空间GNU GDB 接口支持完整的断点功能，包括代码断点，数据断点，断点条件等等显示本地函数的符号和参数用户内存导出和语法高亮显示可自定义、可扩展的界面以及许多其他的的功能，包括那些用户开发的插件添加功能主页： http://www.codeblocks.org3. Eclipse CDT (C/C++ Development Tooling)Eclipse 在编程界是一款著名的、开源的、跨平台的 IDE。它给用户提供了一个很棒的界面，并支持拖拽功能以方便界面元素的布置。Eclipse CDT 是一个基于 Eclipse 主平台的项目，它提供了一个完整功能的 C/C++ IDE，并具有以下功能：支持项目创建管理各种工具链的构建标准的 make 构建源代码导航一些知识工具，如调用图、类型分级结构，内置浏览器，宏定义浏览器支持语法高亮的代码编辑器支持代码折叠和超链接导航代码重构与代码生成可视化调试存储器、寄存器的工具反汇编查看器以及更多功能主页： http://www.eclipse.org/cdt/4. CodeLite IDECodeLite 也是一款为 C/C++、JavaScript（Node.js）和 PHP 编程专门设计打造的自由而开源的、跨平台的 IDE。它的一些主要特点包括：代码补完，提供了两个代码补完引擎支持多种编译器，包括 GCC、clang/VC++以代码词汇的方式显示错误构建选项卡中的错误消息可点击支持下一代 LLDB 调试器支持 GDB支持重构代码导航使用内置的 SFTP 进行远程开发源代码控制插件开发基于 wxWidgets 应用的 RAD（快速应用程序开发）工具，以及更多的特性主页： http://codelite.org/5. Bluefish 编辑器Bluefish 不仅仅是一个一般的编辑器，它是一个轻量级的、快捷的编辑器，为程序员提供了如开发网站、编写脚本和软件代码的 IDE 特性。它支持多平台，可以在 Linux、Mac OSX、FreeBSD、OpenBSD、Solaris 和 Windows 上运行，同时支持包括 C/C++ 在内的众多编程语言。下面列出的是它众多功能的一部分：多文档界面支持递归打开文件，基于文件名通配模式或者内容模式提供一个非常强大的搜索和替换功能代码片段边栏支持整合个人的外部过滤器，可使用命令如 awk，sed，sort 以及自定义构建…