目录
4 关系: C++,虚函数 (程序语言),Visual C++名字修饰,数据。
- C++
C++
C++是一種使用廣泛的计算机程序設計語言。它是一種通用程序設計語言,支援多重编程模式,例如程序化程序設計、数据抽象、面向对象程序設計、泛型程序設計和设计模式等。 比雅尼·斯特勞斯特魯普博士在贝尔实验室工作期间在20世紀80年代發明並實現了C++。起初,這種語言被稱作“C with Classes”(“包含‘類’的C語言”),作為C語言的增強版出現。随后,C++不斷增加新特性。虚函数(virtual function)、运算符重载(operator overloading)、多繼承(multiple inheritance)、标准模板库(standard template library, STL)、异常处理(exception)、运行时类型信息(Runtime type information)、命名空間(namespace)等概念逐漸納入標準。1998年,國際標準組織(ISO)頒布了C++程序設計語言的第一個國際標準ISO/IEC 14882:1998,目前最新标准为ISO/IEC 14882:2017。根據《C++編--程思想》(Thinking in C++)一書,C++與C的代码执行效率往往相差在±5%之間。 C++語言發展大概可以分為三個階段:第一階段從80年代到1995年。這一階段C++語言基本上是傳統類型上的面向对象語言,並且憑藉着接近C語言的效率,在工業界使用的開發語言中佔據了相當大份額;第二階段從1995年到2000年,這一階段由於標準模板庫(STL)和後來的Boost等程式庫的出現,泛型程序設計在C++中佔據了越來越多的比重。當然,同時由於Java、C#等語言的出現和硬體價格的大規模下降,C++受到了一定的衝擊;第三階段從2000年至今,由於以Loki、MPL(Boost)等程式庫為代表的產生式編程和模板元編程的出現,C++出現了發展歷史上又一個新的高峰,這些新技術的出現以及和原有技術的融合,使C++已經成為當今主流程序設計語言中最複雜的一員。.
虚函数 (程序语言)
在面向对象程序设计领域,C++、Object Pascal 等语言中有虚函数(virtual function)或虚方法(virtual method)的概念。这种函数或方法可以被子类继承和,通常使用动态调度实现。这一概念是面向对象程序设计中(运行时)-zh:多型;zh-tw:多型;zh-cn:多态-的重要组成部分。简言之,虚函数可以给出目标函数的定义,但该目标的具体指向在编译期可能无法确定。 虚函数在设计模式方面扮演重要角色。例如,《设计模式》一书中提到的23种设计模式中,仅5个对象创建模式就有4个用到了虚函数(抽象工厂、工厂方法、生成器、原型),只有-zh:單體;zh-tw:單體;zh-cn:单例;-没有用到。.
Visual C++名字修饰
Name mangling或者Decorated Name是指程序设计语言中具有存储性质的对象的名字被编译器改写,以适合编译器、链接器(linker)、汇编器(assembler)使用。所谓的具有存储性质的对象,即lvalue对象,是指要实际占用内存空间、有内存地址的那些实体对象,例如:变量(variables)、函数、函数指针等。C++中的纯虚函数作为特例也属于这一范畴。而数据类型(data type)就不属于具有存储性质的对象。Name mangling如何翻译成中文,尚无广泛接受的译法。可翻译作改名或名字修饰(name decorating)。 对于支持重载(overload)的程序设计语言,name mangling是必需的因而具有特别重要意义。C++允许函数重载 int foo(int i); void foo(char c); C++也允许变量名称在不同限定(qualifier)下同名: std::cout; 因此C++的编译器必须给这些函数及变量不同的名字以供程序编译链接、载入时的内部辨别使用。 C++的编译器可大略分为Windows平台上的Microsoft Visual C++与类Unix平台上的GNU CC/g++两大类,分别成了各自操作系统环境下的业界工业标准。例如,Windows平台上的Intel C++ Compiler(ICC)与Digital Mars C++,都与Visual C++保持了二进制兼容(Application Binary Interface, ABI)。而Linux平台上的Intel C++ Compiler(ICC)与HP aC++,都与GCC 3.x/4.x做到二进制兼容。GCC是开源产品,它的内部实现机制是公开的;而Visual C++不公开它内部实现细节,因此在name mangling上并无详尽的正式文档,Visual C++ name mangling的细节属于hacker行为。 一般情况下,编程者不需要知道C/C++函数的修饰名字。但是,如果在汇编源程序或者内联汇编中引用了C/C++函数,就必须使用其正确的修饰名字。.
数据
資料(data),是指未經過處理的原始記錄。一般而言,資料缺乏組織及分類,無法明確的表達事物代表的意義,它可能是一堆的雜誌、一大疊的報紙、數種的開會記錄或是整本病人的病歷紀錄。資料描述事物的符号记录,是可定义为意义的实体,涉及事物的存在形式。是关于事件之一组离散且客观的事实描述,是构成訊息和知识的原始材料。.
另见
C++
- Boost C++ Libraries
- C++
- C++/CX
- C++11
- C++14
- C++17
- C++类
- C和C++運算子
- Decltype
- Iostream
- Java和C++的對照
- New (C++)
- POD (程序设计)
- Pragma once
- RAII
- SYCL
- String (C++标准库)
- Typedef
- Typename
- Visual Assist
- 三法則
- 依赖于实参的名字查找
- 可变参数宏
- 名字修饰
- 執行期型態訊息
- 复制省略
- 奇异递归模板模式
- 寬字元
- 未定义行为
- 概念 (C++)
- 模板 (C++)
- 模板元編程
- 比雅尼·斯特劳斯特鲁普
- 缺省参数
- 虚函数
- 虚继承
- 複製建構子
- 解構子
- 設定運算子
- 顺序点
- 预编译头
亦称为 平凡类型,标准布局类型,普通旧式数据结构。