对于C++的思考

前言

本文是Bjarne Stroustrup的HOPL4论文 笔记及拓展(目录) 的起始篇。

C++的理念

C++被设计出来到底是为了回答什么样的问题呢?

  1. 如何直接操纵硬件?
  2. 同时支持高效,高级的抽象?

C++在1980年代仅仅是一个基于C和Simula语言功能的组合,经过多年的发展,C++与其他编程语言的决定性区别有两方面:

  1. 语言结构到硬件设备的直接映射
  2. 零开销抽象

关于零开销抽象是这样被描述的:

  • 你不用的东西,你就不需要付出代价(也称为“没有分布式脂肪”)
  • 你使用的东西,你手动写代码也不会更好

抽象在代码中表示为函数,类,模板,概念和别名。

C++主要是一种工业语言,一种构建系统的工具。对于用户来说,C++不仅仅是一种由规范定义的语言,它是由许多部分组成的工具集的一部分:

  • 语言
  • 标准库
  • 庞大的 常常是旧的 代码库
  • 工具 包括其他语言
  • 教学和培训
  • 社区支持

对于简单的事情简单做,并确保复杂的事情并非不可能或没有必要地难。

年表

  • 1979年:工作始于“带类的C”,它变成了C++,拥有了第一个非研究性用户。
    语言:class,构造函数/析构函数,public/private,简单继承,函数参数类型检查
    :task(协程和仿真),用宏参数化定义的vector
  • 1985年:C++的首次商业发行
    语言:virtual函数,运算符重载,引用,常量
    :complex算法,流输入输出
  • 1989-91年:ANSI和ISO标准化开始
    语言:抽象类,多重继承,异常,模板
    :输入输出流
  • 1998年:C++98,第一个ISOC++标准
    语言:namespace,具名类型转换(非C风格的转换),bool,dynamic_cast
    :STL(容器和算法),string,bitset
  • 2011年:C++11
    语言:内存模型,auto,范围for,constexpr,lambda表达式,用户定义字面量…
    :thread和锁,future,unique_ptr,shared_ptr,array,时间和时钟,随机数,无序容器(哈希表)…
  • 2014年:C++14
    语言:泛型lambda表达式,constexpr函数中的局部变量,数字分隔符…
    :用户自定义字面量…
  • 2017年:C++17
    语言:结构化绑定,变量模板,模板参数化的构造函数推导…
    :文件系统,scoped_lock,shared_mutex(读写锁),any,variant,optional,string_view…
  • 2020年:C++20
    语言:concept,module,协程,三路比较,改进对编译期计算的支持…
    :概念,范围,日期和时区,span,格式,改进的并发和并行执行…

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/246296.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GPU Gems1 - 17 环境遮挡

环境光遮蔽(Ambient Occlusion)“AO”为Amblent Occlusion的缩写,中文译为环境光遮蔽。在DirectX 10.1 API推出后,Amblent Occlusion升级为SSAO(Screen-Space Ambient Occlusion:屏幕空间环境光遮蔽)&#…

C++ 模板浅谈

引言与概述 C模板机制允许在定义类,函数,类型别名的时候将类型或值当作参数,这样定义的类和函数在运行时间和空间效率上并不逊色于手工打造的非通用的代码。 模板提供的代码是类型安全的。 模板是一种编译时期的机制,与手工编写…

GPU Gems1 - 18 空间BRDF(Spatial BRDFs)

这章主要介绍了空间双向反射分布函数(SBRDF),接着文章讨论了压缩SBRDF表达式,以及由离散光或环境贴图所照明的SBRDF的渲染方法。关于BRDF请参考大佬浅墨的这篇文章https://blog.csdn.net/poem_qianmo/article/details/75943714 S…

浅谈表面反射——波动光学篇

Radiometric Definitions 首先让我们来回忆一下辐射度量学中关于irradiance和radiance的定义: 我们在这里定义光源(source)在x-z平面,因此入射光就可以只用θi\theta_{i}θi​来描述。dAs\mathrm{d}A_{s}dAs​是表面积。定义dΦi\mathrm{d}\Phi_{i}dΦ…

GPU Gems1 - 19 基于图像的光照(Image-Based Lighting)

这篇文章打破了当时立方体贴图环境(Cube-Map Environment)用法的桎梏,深入研究了更多可能的逼真光照效果。文章主要研究了基于图像的光照(Image-Based Lighting,IBL),包括局部化的立方体映射&am…

Polygonal-Light Shading with LTC

概述 如果我们有一个上半球的余弦分布函数(Do)(D_{o})(Do​),并对这个余弦分布函数进行一个矩阵(M)(M)(M)变换,变换为一个新的分布函数(D)(D)(D)。 DMDoD M D_{o}DMDo​ 这就是基本思想:用一个余弦分布函数来拟合出不同的分布函数&#xff…

GPU Gems1 - 20 纹理爆炸(Texture Bombing)

【章节概览】 这章介绍了纹理爆炸(Texture Bombing)和相关的细胞技术,它们能在Shader中增加视觉的丰富性,图像的多样性,并减少大块纹理图案的重复性。 【核心要点】 纹理爆炸(Texture bombing&#xff0…

Catlike Coding网站文章解析 -- 1.Procedural Grid

原文英文版链接https://catlikecoding.com/unity/tutorials/procedural-grid/,里面有每一部分的untiy工程链接,文章内容也更详实。 本章内容: 创建一系列点使用协程实现他们的摆放位置定义一个由三角形组成的平面自动生成法线添加纹理坐标和…

GPU Gems1 - 21 实时辉光(Real-Time Glow)

这章浅墨的文章讲的很细了,这里基本照扒一遍加深印象,原文链接:https://zhuanlan.zhihu.com/p/36499291 【章节概览】 这章讲到2D光照效果中的辉光(Glow)和光晕(Halo),展示了如何通…

Catlike Coding网站文章解析 -- 2.Procedural Grid

本章内容 创建一个闭合的cube mesh给cube添加带弧度平滑的边缘定义法线使用sub-meshes(子mesh)创建一个常规shader合并碰撞体1.合成一个cube 上一章https://mp.csdn.net/postedit/89474068我们已经实现了一个平面mesh。一个cube由6个平面组成&#xff…

GPU Gems1 - 23 景深技术综述

本章主要介绍如何使用GPU创建实时的景深(Depth of Field)效果。参考浅墨总结文章的链接https://zhuanlan.zhihu.com/p/36499291 聚焦在枪上,背景模糊【核心要点】 物体在距离镜头的一个范围之内能够清晰成像(经过聚焦&#xff09…

GPU Gems1 - 22 颜色控制(Color Controls)

这章将在游戏中图像处理的讨论,扩展到技术和艺术上控制颜色的方法和应用,包括将图像从一些的色彩空间中移入移出,以及快速地给任何2D或3D场景加上精美的色调。 色彩校正(Color Correction)是几乎所有印刷和胶片成像应…

GPU Gems1 - 25 用纹理贴图进行快速过滤宽度的计算

这章介绍在片元shader中计算导数近似值的技术。这个技术把特别的值载入纹理mipmap的每个级别,以特殊的方式使用纹理映射硬件,计算出导数的结果,给出在屏幕上的像素间某个量的变化率。 Cg标准程序库提供ddx和ddy函数,计算任意关于…

c#基础知识(1)

简介:C# 是一个现代的、通用的、面向对象的编程语言,它是由微软(Microsoft)开发的,由 Ecma 和 ISO 核准认可的。 程序结构:引用命名空间、命名空间、类、方法、属性、语句。 数据类型:bool、byt…

GPU Gems1 - 24 高质量的过滤

在一些应用中,高质量的过滤是至关重要的,可以用像素shader代码执行任何过滤。GPU着色程序不用于CPU的主要之处在于:一般来说,CPU数学操作比纹理访问更快,而在GPU中恰恰相反。图像过滤的目的很简单:对于给你…

2021-04-05

见缝插针小游戏 结束动画 我们的结束动画很简单,就是把画面放大,把背景改成红色,再有一个停顿就可以了 1、对于放大画面和修改背景颜色的操作,在这里可以直接修改相机设置 我们要获取到Hierarchy窗口中的Main Camera,…

GPU Gems1 - 26 OpenEXR图像文件格式与HDR(The OpenEXR Image File Format and HDR)

【章节概览】 这章中,大名鼎鼎的工业光魔公司的Florian Kainz、Rod Bogart和DrweHess介绍了OpenEXR标准,这是一种当时新的高动态范围图像(HDRI)格式,在计算机成像的顶级电影中正在快速推广。对于基于图像照明的开发者…

2021-04-08

unity入门教程 创建开始界面 在场景中创建画布Canvas,然后制作开始界面。 首先在Canvas下新建一个空物体,命名为StartWnd。然后在StartWnd下新建一个Image,命名为imgTitle,SourceImage使用main图片。然后在StartWnd下新建一个Butt…

ID Tech 5 中Megatexture针对地形的D3D9 基本实现原理

看GPU Gems2中的 使用基于GPU几何体裁剪图的地形渲染(Terrain Rendering Using GPU-Based Geometry Clipmaps)一文,对Clipmap技术不是理解很好,所以上网搜索一番,发现了这篇文章,实在是太棒的文章&#xff…

2021-04-12

异步传输(Asynchronous Transmission):异步传输模式(Asynchronous Transfer Mode,缩略语为ATM) 异步传输一般以字符为单位, 起始位:先发出一个逻辑”0”信号,表示传输字符的开始。 空闲位:处于逻…