C++

来自开放百科 - 灰狐
跳转到: 导航, 搜索
Wikipedia-35x35.png 您可以在Wikipedia上了解到此条目的英文信息 C++ Thanks, Wikipedia.
C++

C++

目录

简介

C++ 是世界上最流行的系统级语言

C++语言是一种应用较广的面向对象的程序设计语言,使用它可以实现面向对象的程序设计。面向对象的设计与面向过程的设计是有很大区别的,面向对象的程序设计是在面向过程的程序设计的基础上一个质的飞跃。要学会面向对象的程序设计,首先要学会一种面向对象的语言,即要学会用VC编程,就要先有C++的基础,而学习C++语言首先要认识它面向对象的特性和实现面向对象的方法。

第一个 C++ 程序

#include <iostream>
int main()
{
    std::cout << "hello, world\n";
}

历史

  • C++ 语言设计受到了 Simula 的重要影响,Simula 一种编译式的编程语言,由奥利-约翰·达尔与克利斯登·奈加特,在1960年代于奥斯陆的挪威计算中心,开发出来了 Simula I 与 Simula 67 两代。它承继了 ALGOL 60 的基础,被认为是第一个面向对象编程的编程语言。
  • A History of C++: 1979−1991

C++标准

C++主要版本:1998, 2003, 2011, 2014, 2017, 2020

C++ standards drafts

  • 2020,ISO/IEC 14882:2020, C++20, 第六个C++标准
  • 2017, ISO/IEC 14882:2017, C++17, 第五个C++标准
  • 2014, ISO/IEC 14882:2014, C++14, 第四个C++标准
  • 2011, ISO/IEC 14882:2011, C++11, 第三个C++标准
  • 2003, ISO/IEC 14882:2003, C++03, 第二个C++标准
  • 1998, ISO/IEC 14882:1998, C++98, 第一个C++标准

C++标准的运作方式:ISO标准委员会,SC22 WG21,是在ISO规则下运行的。奇怪的是,这些规则并非标准化的,而是随着时间的变化而变化。(译注:标准委员会的规则并不标准)。大多数国家都有活跃的C++团体并形成了自己的国家标准。这些团体举行会议,通过网络协调一致,并向ISO会议推选代表。加拿大,法国,德国,瑞士,英国和美国是出席这些会议较多的国家。丹麦,荷兰,日本,挪威,西班牙和别的一些国家则是出席人数比较少的国家。大多数通过网络召开的会议都是介于这两者之间,会议记录由标准委员会编号并存放在 WG21。

标准委员会每年召开两到三次会议,每次约一周的时间。这些会议的大部分工作就是工作划分,比如“核心“,”库“,”演化“,“并发”。根据需要,也会为了解决一些迫切的问题而召开会议,比如“概念”和“内存模型”。会议主要用来投票表决。首先,工作组举行民意投票来判断某个论点是否可以作为一个整体提案递交给标准委员会。然后,如果这个提案被接受,标准委员会将进行每人一票的投票表决。我们花费大量注意力在那些我们没有进入但是已经有很多人表现出来和国家不同意的形势--这将会导致长期的争论。最后,官方草案的投票由国家标准机构通过邮件完成。标准委员会和C标准组织以及POSIX有正式的联系,并和其他一些组织也有或多或少的联系。

标准委员会包括大约200个人,其中有大约60位会出席每年两到三次一周时间的会议。除此之外,在一些国家还有一些国家标准组织和会议。多数成员通过出席会议,邮件讨论或提交论文供标准委员会斟酌等方式贡献自己的力量。多数成员有朋友或同事提供帮助。第一天,标准委员会召集从各个国家而来的代表,并且每一次会议由6到12个国家的代表参加。最终投票由20个国家标准组织完成。

状态

Library

Standard C++ library headers listed below, 13 constitute the Standard Template Library, or STL.

  • <algorithm> -- (STL) for defining numerous templates that implement useful algorithms
  • <bitset> -- for defining a template class that administers sets of bits
  • <cassert> -- for enforcing assertions when functions execute
  • <cctype> -- for classifying characters
  • <cerrno> -- for testing error codes reported by library functions
  • <cfloat> -- for testing floating-point type properties
  • <ciso646> -- for programming in ISO 646 variant character sets
  • <climits> -- for testing integer type properties
  • <clocale> -- for adapting to different cultural conventions
  • <cmath> -- for computing common mathematical functions
  • <complex> -- for defining a template class that supports complex arithmetic
  • <csetjmp> -- for executing nonlocal goto statements
  • <csignal> -- for controlling various exceptional conditions
  • <cstdarg> -- for accessing a varying number of arguments
  • <cstddef> -- for defining several useful types and macros
  • <cstdio> -- for performing input and output
  • <cstdlib> -- for performing a variety of operations
  • <cstring> -- for manipulating several kinds of strings
  • <ctime> -- for converting between various time and date formats
  • <cwchar> -- for manipulating wide streams and several kinds of strings
  • <cwctype> -- for classifying wide characters
  • <deque> -- (STL) for defining a template class that implements a deque container
  • <exception> -- for defining several functions that control exception handling
  • <fstream> -- for defining several iostreams template classes that manipulate external files
  • <functional> -- (STL) for defining several templates that help construct predicates for the templates defined in <algorithm> and <numeric>
  • <iomanip> -- for declaring several iostreams manipulators that take an argument
  • <ios> -- for defining the template class that serves as the base for many iostreams classes
  • <iosfwd> -- for declaring several iostreams template classes before they are necessarily defined
  • <iostream> -- for declaring the iostreams objects that manipulate the standard streams
  • <istream> -- for defining the template class that performs extractions
  • <iterator> -- (STL) for defining several templates that help define and manipulate iterators
  • <limits> -- for testing numeric type properties
  • <list> -- (STL) for defining a template class that implements a list container
  • <locale> -- for defining several classes and templates that control locale-specific behavior, as in the iostreams classes
  • <map> -- (STL) for defining template classes that implement associative containers
  • <memory> -- (STL) for defining several templates that allocate and free storage for various container classes
  • <numeric> -- (STL) for defining several templates that implement useful numeric functions
  • <ostream> -- for defining the template class that performs insertions
  • <queue> -- (STL) for defining a template class that implements a queue container
  • <set> -- (STL) for defining template classes that implement associative containers with unique elements
  • <sstream> -- for defining several iostreams template classes that manipulate string containers
  • <stack> -- (STL) for defining a template class that implements a stack container
  • <stdexcept> -- for defining several classes useful for reporting exceptions
  • <streambuf> -- for defining template classes that buffer iostreams operations
  • <string> -- for defining a template class that implements a string container
  • <strstream> -- for defining several iostreams classes that manipulate in-memory character sequences
  • <utility> -- (STL) for defining several templates of general utility
  • <valarray> -- for defining several classes and template classes that support value-oriented arrays
  • <vector> -- (STL) for defining a template class that implements a vector container

多范式

从某种观点看,C++ 实际上是将三种语言合为一体:

来自《C++语言的设计与演进》p164

此外,C++

  • 面向对象(灵活应用virtual继承+shared_ptr可以达到java/C#的效果)
  • 模板(这里分两类,分别为type rich programming和meta programming,区别很大)
  • 函数式编程(如今有了lambda,配合<algorithm>文件,简直无敌了)
  • 过程式

此处来源:知乎

另外观点: C++是四类范式的组合体:

  • 过程式/结构化
  • 面向对象
  • 代表Lambda的模板(元编程)
  • 以及作为一个Markov Machine也具有图灵完备性的宏。

此外还有一个我不知道怎么归类的type rich programming。

C/C++总共分成四大流派

  • 1.C风格流派
  • 2.面向对象流派
  • 3.模板元流派
  • 4.混合流派

编译器

C++学习

C++语言中出现的 extern "C"语法

extern "C" {
  extern int getopt(int, char * const *, const char *);
  extern char *optarg;
}

被extern "C"修饰的变量和函数是按照C语言方式编译和连接的;

这源于C++支持函数重载,而过程式语言C则不支持。而编译后的名字会有所不同,

void foo( int x, int y ); 
c  编译后 _foo
c++ 编译后 _foo_int_int
void foo( int x, float y )
c++ 编译后 _foo_int_float

编译后的类似_foo_int_int这样的名字包含了函数名、函数参数数量及类型信息,C++就是靠这种机制来实现函数重载的。

编码风格

Documents

文档

链接

IDE

更多:Free integrated development environments

Compilers

News Groups

  • comp.lang.c.moderated
  • comp.lang.c++.moderated
  • comp.std.c++

Misc

Libraries

Boost

图集

VC ++

VC++6.0MSDN

下载1 ISO文件 
下载2 RAR 文件
下载3 RAR 文件

链接

Materials

Tutorials

Electronic books

Support

Other

Libraries and code repositories

分享您的观点
个人工具
名字空间

变换
操作
导航
工具箱