ANSI/ISO C++ Professional Programmer's Handbook(1)

3dMax脚本类插件:不写 C++也能造“原生”工具 从plugin关键字到场景持久化,拆解 MAXScript 插件开发全流程! 阅读详情
  摘自: http://sttony.blogspot.com/search/label/C%2B%2B

1

简介

by Danny Kalev

面向对象的程序设计可以回朔到60年代:类,继承和虚拟成员函数作为 Simula67的一个完整部分,一种主 要用来写事件驱动仿真的程序语言。当Smalltalk第一次在1972年再次出现时它提供了一种纯粹的面向对象 的程序设计环境。事实上,Smalltalk 定义了面向对象的程序设计。这种程序设计的风格在当时是如此的创 新和具有革命性使得它花了10年才使自己成为软件工业的标准。无庸置疑地,80年代初期C++的出现为这次 革命作了主要的贡献。

C++的起源

在1979年,Bell (现在的 AT&T)实验室 Labs的一位年轻工程师, Bjarne Stroustrup,开始了扩展C的 实验,为了使C成为实现大规模工程的更好的工具。在当时一个工程平均由数万行代码组成(LOC,lines of code )。


注意: 今天微软的Windows 2000 (以前的 NT 5.0) 由多于三千万行代码组成。


当工程超过100,000 行代码时,C的缺点变的十分明显让人无法接受。在其他事情中,有效的团队开发基于一种在自己的工作中引用他人成果以简化自己工作的能力——一种很难在C中完成的事情。

带类的C

通过在C中增加类,新的合成语言——“C with classes”——能提供更好的对封装和信息隐藏的支持。类提供了在其内部实现(更可能改变的部分)和他的外部接口之间的明显的分离。一个类对象有通过其构造器确定的确定的状态,并且它还将数据和处理数据的方法捆绑的一起。

进入C++

到了1983, 许多改变和扩展已经被加到带类的C中。在那个时期“C++”这个名字被提出了。于是从那时到 现在,++后缀变成类面向对象的同义词。(Bjarne Stroustrup 如果注册++这个商标,他将大赚一笔。) 也是在那个时期C++首次在AT&T Labs之外被应用。用户的数量每几个月增加一倍——也包括语言的编译 器和扩展工具。

80年代后期:开放导致的泛滥

到1985到1989, C++经历了主要的发展。保护成员,保护继承,模板和稍微有点争议的多继承加到语言中。很明显C++需要标准。

ANSI委员会标准的建立

1989年, American National Standards Institution (ANSI)委员会的C++的标准建立了。 委员会的官方名字是X3J16,之后变成了J16。一般的,标准化委员会不会从空开始起草标准;他们宁愿采纳一份事实上存在的参考,然后使用它作为基础。ANSI C 委员会使用The C Programming Language(Kernighan 和 Ritchie)作为起点。同样的ANSI C++ 委员会使用Annotated C++ Reference Manual(ARM作者Ellis 和 Stroustrup)作为起基础文档。ARM 提供了一个清晰详细的委员会工作的起点。委员会的政策不是要突击建立一份在一两年后就过时的草案。相反的,政策是允许来自使用C++的团体的需求来改变它。虽然如此,委员会也发起可扩展的关于语言的修正和改变,比如runtime type information (RTTI执行期类型信息)和新的运算符。

成熟

到那时为止,上十万人使用C++。C++编译器在每一个平台上实现。新的C++-基于frameworks,象MFC和OWL已出现了。委员会不得不面对来自几个方面的压力。一些组织提倡一些从别的面向对象语言借用来的新特性和扩展,同时另一些团体以可能的有效方式要求保持标准。另外,C++还必须保持和C的兼容性,包括对8种不同风格的支持:完整类型申明,讨厌的指针语法,结构,共用体,全局函数和许多其他的不是严格按面向对象程序设计步骤的特性。

国际性的标准

C++ 的标准是所有国家标准化团体共同努力的结果。这不同于C的标准化。C标准化最初被ANSI 作为一个美国标准公布,然后被国际标准化组织(ISO)添加了一些扩展(主要是国际化的问题)后作为一个国际标准采用。C++的国际化投入保证了这是一个在世界范围内广泛承认的标准,虽然在利益方面有一些复杂的关系(at the price of somewhat more complicated procedures)。因此,委员会的会议实际上是ANSI工作组和ISO工作组的联合会议。职务上,ANSI工作组作为ISO的顾问而工作。所以,在每一个技术问题上都有两种建议:ANSI的建议、用来指出ANSI的推荐,和后来的ISO的建议,来作出实际的 决定。一些重要的改变是为了符合ISO批准的标准,包括增加一种内建类型wchar_t, iostream库的模板化, string的模板化,和locale library的介绍。这些都是为了封装基于文化的差别。

委员会的草案和公众的评论

委员会最初的工作是产生一份草案,作为Committee Draft (CD)发表。为了这个目的,委员会一年中在世界的不同地方召开三次为期一个周的会议。 就象来自ISO的注释,第一份CD收到了许多不赞成的意见。委员会 决定了这些技术上的问题并且在第二版中标上为这些地方标上注释。第二份CD被ISO批准了;然而仍然有5个 反对意见,并伴随着注释。经过ISO的投票,CD向公众公布。公众评论的过程开始了来自全世界的C++程序员对待审定的CD的评论以及对其矛盾和冗长之处的指出。

标准的锁定和最终化(Feature Freeze and Finalization)

在1996年11月批准第二版CD之后,委员会的主要任务是答复那5个反对票以及伴随其的注解,然后将其变为赞同票。最后的文件是Final Draft International Standard(FDIS,国际标准最终草案)。1997年11月在 Morristown, New Jersey 举行的会议上FDIS被标准化委员会一致通过。1998年经过一些微小的变化之后,ISO批准了FDIS,使其成为一个国际化的标准。按ISO的惯例在标准发布后,5年内将不会被修改,除了对错误 的修改。若发现错误后,你可以向委员会提交一份关于你的发现的Defect Report。

不同于其他面向对象语言的C++

C++ 在许多方面和其他面向对象语言不同。例如,C++不是一种root-based语言,它也不是在虚拟机上运行的。这些不同显著的扩大了C++的应用范围。

对以前系统的向后兼容性

以前的C代码能被容易转化为新的C++代码,这是C++的主要优点。从C到C++的移植不会迫使你丢弃任何优秀 的C代码。许多商业化的frameworks,甚至C++自己的标准库中的一些组件是由包装在面向接口的传统的C组成 的。

性能

解释语言允许简单的代码输入,但可是代价是重要的性能开销。另一方面 C++使用它从 C继承来得编译和链 接模型。C++设计者的一个目标就是尽可能的保持它的高效;编译-连接模型可以代码的生成和优化非常有效 。另外一个影响性能的因素是使用垃圾收集器。这个特性是唾手可得而且垃圾收集器可以阻止一些常见的语 法错误;然而,有垃圾收集器的语言在那些限制十分严格的时间限制(time-critical) 程序开发环境中是 无法使用的。由于这个原因,C++没有一个垃圾收集器。

面向对象化和其他有用的范例(Paradigms)

出面向对象的程序设计之外, C++支持其他有用的程序设计风格,包括过程化的程序设计,基于对象的程序 设计,泛型程序设计——使C++成了一种多范例(multi-paradigm),多用途(general-purpose)的程序设计语言。

过程化的程序设计

过程化的程序设计今天并不很流行。然而,有很充分的理由使C++在今天仍支持这种风格。

从C程序员过度到C++程序员

C程序员到C++的第一部不是要被迫抛弃他的所有的专长。许多原始和基础的C++概念是从C继承来的,包括内建运算符和基本类型,指针动态内存分配的概念,头文件,预处理等等。在短时期内,向C++转型的C程序员可以继续工作。

两种语言混合的环境

C++和 C 代码可以一起工作。在确定的条件下,这种混合是协调和有效的。

自动产生代码

许多软件工具和代码生成器可以产生作为应用程序中间舞台的C代码。例如,大部分关系数据库的SQL查询 被翻译成C代码,然后在被编译、连接。当生成的代码不是被程序员使用时,强迫这些生成器产生 C++代码 (虽然一些已经那么做了)不需要该很多地方。此外,许多早期的C++编译器并不是真真意义上的C++编译器;他们更象是翻译器,因为他们将C++代码翻译成C代码,然后在编译、连接。事实上,任何有效的C++程序可以直 接翻译成纯粹的C代码。

面向对象的程序设计

这是被广泛使用的C++编程风格。这本书的目的就是为生成有效、可靠的、可重用的、易维护的面向对象的 代码给予程序员有用的指导和规则。但是没有通用的OO的真谛;OO的定义在学校、语言、用户之间变化。然而 ,有一个关于这一通用概念的共识——一个封装、信息隐藏、多态、动态绑定和继承的联合体。高级 面向对象技术主要由泛型程序设计和多继承组成。一些概念将在后续章节中深入讨论。

泛型程序设计

泛型程序设计在可重用能力方面开始了超越面向对象的程序设计的第一步。C++的两个重要特性,模板和运 算符重载是泛型程序设计的基础。STL,泛型算法和容器的集合,可能是“泛型”给人印象最深的形式。

本书的目标

本书瞄准那些为了提高他们设计和编程熟练度的有丰富经验的C++开发者。它揭露事实和技术,并且为高级 的、适应标准的、有效率的使用 C++提供一个知识库。另外,本书也解释在语言高层特性之下的机制,并且解 释C++设计和演化之下的体系。

读者对象

读者对象是想通过获得新的设计技术和设计模式以增加他们的熟练程度的中级、高级C++开发者。在增加许 多新的特性到这种语言的基础上,标准化委员会声明不赞成一些特性和库组件。在这本书中,想开发长久的 ,适用于未来的C++软件的读者可以发现一个广泛的不赞成的特性和推荐作为替换选项的列表。

本书的结构

第二章, “标准简报:ANSI/ISO C++最新的附件,”提供一些 在C++标准中使用的关键术语,和那 些是在本书中广泛地使用的。在这之后,将讲述最近的C++的改变和扩展。最后,第二章将给出在标准中列出 的反对的特性的总揽,并且给出符合标准的他们的替换。

第三章, "运算符重载," 探索了好处以及运算符重载可能带来的问题。它讨论了应用与运算符重载 的限制,以及解释了如何转化运算符。

第四章,“特殊的成员函数:默认构造器,拷贝构造器,销毁器,赋值运算符,”解释了特殊成员函 数的语法和他们在类设计中的角色。它也示范了一些有效使用特殊成员函数的技术和指导方针。

第五章, "面向对象的编程和设计,"提供一个通过 C++支持的多样的程序设计风格的纵览,重点 是面向对象设计和程序设计的原理。

第六章, "异常处理," 先讲述了传统的错误处理的方法和其缺点,然后引出了标准的错误处理。提 供了一个历史上的异常处理设计的摘要,然后讨论异常的关联处理的性能问题。

第七章, "运行时类型识别,"讨论了RTTI(运行时类型识别)的三个组件:typeid,dynamic_cast和类的type_info。另外,解释了什么时候必须使用RTTI。 最后,讨论了RTTI的性能开销。

第八章, "命名空间,"阐明语言的命名空间增加部分后面的基本原理和命名空间解决的问题。然后示 范了实际中命名空间如何使用,以及命名空间和其他特性的相互影响。

第九章, "模板," 讨论了设计的多样化和实现模板,包括类模板,函数模板和需要专门关注的模板 问题(比如指向成员的指针,模板类的虚拟成员函数,和显式的实例化)。

第十章, "STL和泛型程序设计," 是标准模板库(Standard Template Library STL)和一般泛型程 序设计的介绍。它讨论了泛型程序设计的法则,重点是作为泛型程序设计的规范framework的STL。这一章也介 绍STL组件的使用:容器、算法(algorithms)、迭代子(algorithms)、分配运算符、适配器(adapters) 、绑定者(binders)、和函数对象。对使用最广泛的STL组件,std::vector和 std::string,作深入的探索。

第十一章, "内存管理," 解释了C++的对象模型。讨论了三种数据存储类型:静态、自动、自由存储。这一章也深入探讨了了运算符new 和 delete的语法,和他们的底层实现。另外,示范了高级内存管理技术的用法,和指导你避免一般的与内存有关的错误。

第十二章, "优化你的代码," 专注与代码的优化。这章提供了写出更有效代码的有用的指导的技巧,并且它向为了使空间级小和加速运行时速度的更有作为的最优化技术取的效果。

第十三章, "与C语言的兼容性问题,"示范了如何移植C代码到C++代码,特别是过程化程序设计到面向 对象程序设计。它列出了C++的C字集和ISO C的区别。最后,深入探讨了C++对象在内存中的底层表示和对象和 C 结构的兼容性。

第十四章, "总结和未来的方向," 结束了本书。本章讲述了贯穿与过去二十年C++设计和发展中的法则和指导方针,并且将C++与少数的成功的其他程序设计语言的发展。然后,列举了进入标准所有特性。之后,讨论了未来可能的扩展,包括自动化垃圾收集,持久对象和并发性。其他假定的并讨论的未来的扩展有:动态连接库、基于规则的程序设计(rule-based programming)和可扩展的成员函数。

本地部署静态网站托管平台 Netlify 并实现外部访问(Windows 版本) Netlify 是一款基于云计算的网站部署和托管平台,专为开发者提供便捷的静态网站和 Jamstack 应用部署服务。它的能力在于将网站构建、部署、托管以及持续集成等流程高度集成,简化了开发和运维的复杂程度。用户无需关心服务器的配置、维护等工作。本文将详细介绍如何在本地安装 Netlify 以及结合路由侠内网穿透实现外网访问 Netlify。 阅读详情

相关推荐

tuts4you-lena151-Crackme-tutorial06

一、前言      本次研究的是lena151-Crackme-tutorial06,也是一个应用程序,但因为平台迭代的关系,程序不能正常运行,只能完成部分破解。 (一)·本次我们要破解的目标是个应用程序,如下图 (二)、使用工具:x32dbg 二、过程 这个程序的破解的方法很多,首先最简单的一种不外乎就是搜索字符串,我就按照这个思路来完成。 (一)查找字符串<Unregis...

h123120的专栏 518

ANSI/ISO C++ Professional Programmer's Handbook 3

ANSI/ISO C++ Professional Programmers Handbook 3 运算符重载by Danny Kalev 简介 运算符重载的唯一规则 成员和非成员 运算符的接口 运算符的一致性

sttony的专栏 845

别再到处找离线包了!Visual Studio 2022 企业版/社区版离线安装保姆级教程(含工作负载选择指南)

本文提供Visual Studio 2022企业版/社区版离线安装的详细教程,包括工作负载选择指南和批量安装优化策略。针对网络隔离或带宽受限环境,介绍如何制作离线安装包、选择合适的工作负载组合,并分享高级技巧如增量更新和自动化部署,帮助团队高效统一开发环境配置。

weixin_28745821的博客 730

ANSI/ISO C++ Professional Programmer's Handbook 4

ANSI/ISO C++ Professional Programmers Handbook 4 特殊成员函数:默认构造器,拷贝构造器,销毁器和赋值运算符by Danny Kale 简介 构造器 从类的构造器调用对象的成员函数 不需要的构造器(Trivial

sttony的专栏 601

无人机精准降落辅助系统核心技术解析

接近地面时(<10米)切换至基于图像的视觉伺服(IBVS),依据图像特征点偏移(如靶标图案、LED标记)微调姿态,消除位置累积误差。通过SRUKF(平方根无迹卡尔曼滤波) 算法融合三类数据,输出6自由度位姿估计(精度达厘米级),抑制单一传感器噪声。权值根据信噪比动态调整。模型预测控制(MPC):针对斜坡降落,构建包含平台倾角、风扰的动力学方程,滚动求解最优油门序列。动态照明适配:针对夜间或低光照场景,系统向降落平台发送亮度调节指令,如增强红外信标强度或调整可见光LED阵列,确保特征识别鲁棒性。

YUNZHUO666的博客 1695

TPS65987D USB PD控制器:从原理到实战的完整设计指南

USB PD(Power Delivery)协议是USB Type-C接口实现高功率快充和数据传输的核心技术标准。其工作原理基于CC(Configuration Channel)引脚的双相标记编码(BMC)通信,通过协商电压和电流,实现高达100W的功率传输。这项技术的核心价值在于统一了充电标准,简化了设备间的互操作性,广泛应用于笔记本电脑、移动电源、扩展坞等设备。TPS65987D作为一款高度集成的USB PD控制器,将复杂的协议处理、电源路径管理和多重保护电路集成于单芯片,显著降低了设计复杂度。通过其可

weixin_30983965的博客 337

ANSI/ISO C++ Professional Programmer's Handbook(12)

  摘自:http://sttony.blogspot.com/search/label/C%2B%2B12优化你的代码by Danny Kalev 简介 本章的范围 在优化你的软件之前 申明的布局 初始化比赋值好 重新放置申明 成员初始化列表 前缀运算符VS后缀运算符 内联函数 函数调用的开销 内联函数的好处 被申明为内

SearchLife的专栏 1209

具身智能端侧硬件选型实战:从算力需求到芯片对比与避坑指南

在边缘计算和嵌入式AI快速发展的今天,端侧智能设备的落地不再单纯比拼芯片的标称算力。TOPS数值只是初筛指标,真实的推理性能还受内存带宽、数据精度、稀疏性以及散热功耗等多重因素制约。理解不同视觉感知、决策规划与语言交互任务对算力的差异化需求,是选型的第一步。本文从技术原理出发,剖析了Jetson Orin、地平线征程、RK3588等主流平台的实测表现,并揭示了散热设计、供电链路与软件生态这三个极易被忽略的隐形瓶颈。通过完整的部署调优实录,展示了量化、缓存与电源模式优化如何提升端侧推理效率,为具身智能、无人车

weixin_29164185的博客 360

ANSI/ISO C++ Professional Programmer's Handbook 13

ANSI/ISO C++ Professional Programmers Handbook 13与C语言的兼容性问题by Danny Kalev 简介 ISO C 和ANSI/ISO C++的C子集之间的区别 函数形参列表 函数申明 空的形参列

sttony的专栏 1259

深度强化学习系列(13): 策略梯度(Policy Gradient)

对于DQN来说使用一个网络直接逼近了值函数,最后取得了非常不错的效果, 但是对于一些连续性控制或者动作空间特别大的环境来说,很难全部计算所有的值函数来得到最好的策略,那么直接计算策略的方法就别提出来了。 回顾一下前面几篇,所谓的策略,其实就是状态到动作的映射数学表达为 π:s→aπ:s→a\pi : s \to a, 我们用ττ\tau 表示状态s到最后一个状态的一个序列,表示为: τ:st...

深度强化学习(DeepRL)探索博客 4641

N5105 PVE UEFI核显直通Windows:从黑屏到HDMI输出的实战调优

本文详细介绍了在N5105处理器上实现PVE UEFI核显直通Windows的实战调优方法。针对黑屏和HDMI音频无法识别等常见问题,提供了系统参数调整、驱动模块加载、虚拟机配置等解决方案,帮助用户成功实现核显直通并优化性能。

weixin_42566424的博客 203

ANSI/ISO C++ Professional Programmer's Handbook 10

ANSI/ISO C++ Professional Programmers Handbook 10STL和泛型程序设计by Danny Kalev 简介 泛型程序设计 STL头文件的组织 容器 算法 迭代器

sttony的专栏 1218

AICodeing:AI驱动的全栈开发革命

作为阿里/字节跳动的资深Java工程师,我们正站在研发效能革命的临界点上。本文将深入探讨如何利用AI技术重构全栈开发流程,实现从需求到上线的量子级提速。

weixin_43290370的博客 1134

ANSI/ISO C++ Professional Programmer's Handbook(13)

 摘自:http://sttony.blogspot.com/search/label/C%2B%2B 13与C语言的兼容性问题by Danny Kalev简介ISO C 和ANSI/ISO C++的C子集之间的区别函数形参列表函数申明空的形参列表隐含的int 申明现在ISO C 做了修订,禁止了隐含int 申明和重复申明全局变量隐含的转换v

SearchLife的专栏 1072

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

ANSI/ISO C++ Professional Programmer's Handbook 12

ANSI/ISO C++ Professional Programmers Handbook 12优化你的代码by Danny Kalev 简介 本章的范围 在优化你的软件之前 申明的布局 初始化比赋值好

sttony的专栏 964

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

ANSI/ISO C++ Professional Programmer's Handbook(3)

  摘自:http://sttony.blogspot.com/search/label/C%2B%2B3运算符重载by Danny Kalev简介 运算符重载的唯一规则 成员和非成员 运算符的接口 运算符的一致性 运算符重载的限制 重载运算符只能用于用户自定义类型 创造新的运算符是不允许的 优先级和参数个数 默认参数 不能被重载

SearchLife的专栏 924

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

ANSI/ISO C++ Professional Programmer's Handbook(10)

 摘自:http://sttony.blogspot.com/search/label/C%2B%2B10STL和泛型程序设计by Danny Kalev简介泛型程序设计STL头文件的组织容器算法迭代器数字库工具容器顺序容器STL容器包含元素的要求容器类vector容器重分配capacity()和size()通过构

SearchLife的专栏 1080

ANSI/ISO C++ Professional Programmer's Handbook(4)

  摘自:http://sttony.blogspot.com/search/label/C%2B%2B4特殊成员函数:默认构造器,拷贝构造器,销毁器和赋值运算符by Danny Kale简介构造器从类的构造器调用对象的成员函数不需要的构造器(Trivial Constructors)避免在构造器中重复一样的代码默认构造器是必需的吗?对STL容器的适

SearchLife的专栏 857

深挖C++:类和对象(中)

(先进后出)

xys_678的博客 191

选型笔记:Type‑C 扩展坞方案评估|DP1.4 转 HDMI2.0 桥接芯片 GSV2201S@ACP

本文记录 GSV2201S 这款 DP1.4a 转 HDMI2.0 桥接芯片评估,梳理视频、HDCP、PD 集成能力,总结 Type‑C 转接 Dongle、扩展坞方案的适配边界,以及差分走线、PD 时序、HDCP 握手等高频调试问题,为 C 口视频转接方案选型提供参考。

ACP广源盛的博客 217

C++移动构造函数详解

移动构造函数是C++11引入的一种特殊构造函数,用于从临时对象(右值)"窃取"资源来初始化新对象,而不是进行昂贵的深拷贝。char* data;public:// 移动构造函数:参数是右值引用 &&// 关键:把源对象的资源置空。

拒绝AI文,努力在AI时代写出感动人心的好文章 386

ThunderKittens 深度解析:一个不基于 MLIR 的 C++ 模板 GPU DSL

Triton 是"让更多人能写 GPU kernel",ThunderKittens 是"让会写的人写得更爽"。前者用 MLIR 换易用性,后者用 C++ 模板换可控性。它们不是替代关系,而是覆盖了 GPU 编程光谱的两端。ThunderKittens 的出现,本质上是对"GPU DSL 必须基于 MLIR"这一默认假设的挑战。编译期类型系统本身就可以是一个强大的 DSL 基础设施,不需要中间 IR,不需要黑盒 pass,也能实现 tile 级抽象和零运行时开销。

Maxwell_Newton的博客 332

蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:倍增法求最近公共祖先LCA解析

蓝桥杯报名正在火热进行(软件赛报名 2026-10-08—12-18,省赛 2027-04-10),电子学会 12 月软件编程(C/C++ 一级至十级、Python 一级至六级)考级报名也已开启(9/23—12/2),全国青少年信息素养大赛算法应用主题赛同步推进——把 LCA 这个模板练熟,正是冲刺这些赛事树型考点的关键一步。所谓「最近公共祖先」:在一棵以某个节点为根的树里,两个节点 u、v 向上追溯,最早交汇的那个祖先就叫它们的 LCA。比如家谱里,你和你表哥最近的共同长辈就是你们的祖父。

IT_Scratch的博客 532

C++ 多态详解:作用、原理与实战用法

多态是C++面向对象的核心特性,通过虚函数实现运行期动态绑定,使同一接口在不同对象上表现出不同行为。其核心作用包括统一接口、提升可扩展性、降低耦合、支持运行时分派与批量处理。实现依赖虚函数表(vtable)和虚指针(vptr),需注意虚析构函数、对象切片等陷阱。相比编译期多态(模板),运行期多态灵活性高但有调用开销。合理结合两者,可兼顾代码的灵活性与性能,是构建可扩展、低耦合系统的关键。

2402_85743155的博客 376

【C语言】字符与字符串函数

C语言中字符串为以\0结尾的字符数组,标准库函数基于此约定。本文解析字符串内存布局,详解ctype.h与string.h中字符分类、长度计算、拷贝、比较等函数的使用要点,强调长度判断与越界风险,最后通过命令行待办事项示例整合fgets、sscanf、strncpy、strcmp,展示实际应用中的关键细节。

记录在学习过程中学到的知识 341

C++ 函数模版

模板参数:● template ,T 就是类型占位符,名字可以自定义,习惯用T● 占位符可以在函数返回值、形参、函数内部当作类型使用使用要点模板代码一般写在头文件:编译器需要看到完整模板源码,才能在每个编译单元完成实例化全局函数、类内成员函数都可以写成模板实例化发生在编译阶段,不是运行时隐式实例化:调用时编译器自动推导实参类型,生成对应版本函数。

2501_94041724的博客 300
上一篇: ANSI/ISO C++ Professional Programmer's Handbook(2)
下一篇: 深入探讨C++中的引用
SearchLife
博客等级 码龄20年 51粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值