13b3ebbe14
把川大 wiki「02.Qt方向」课程代码整理为 CMake 管理的可编译运行项目。
Part1 C/C++ 强化 (p01/, 144 目标, host gcc/g++ 构建, 全绿):
- 修复全部编译失败:补 <cstring>/<fstream>/<iomanip>/<vector> 等缺失头
(common_fix + infer_stl_includes 自动检测注入)、修正 pause() 壳注入
(改检测已转换后的 pause 调用)、namespace 提升出函数体、const 成员函数
正确性、dedupe 不再破坏函数重载集、K&R 隐式 int / 动态异常规范等
C++17 移除特性的可编译等价改写。
- 目录采用深缩写 p01/ch04/s03/ (原 part1_cpp/ch04_class_object/03_ctor_dtor)。
Part3 Qt 桌面 (p03/, 29 目标, 隔离 Qt 5.14.2 构建, 全绿):
- gen_part3.py: Qt 外壳模板 (main+QApplication+show, QTimer 自动退出便于
offscreen 验证)、AUTOMOC + .moc include、rewrite_* 处理散文混入/重载/
资源依赖、生成占位 png/gif + .qrc + rundata 样例数据。
- 修正 QLable 笔误、全角分号、.→->、Windows 路径、QApplication 阻塞事件
循环改为 QCoreApplication 等。
任务1 概念/版本验证:
- tools/std_probe.py: 跨 -std= 编译探针 (--pedantic-errors 让已废除特性硬失败)。
- tools/demo_versions/: K&R 隐式 int、三目左值、void* 转换、enum 赋整、
const 经指针、动态异常规范 共 6 个跨版本演示。
- docs/VERSION_NOTES.md: 每条「原文说法→C17/C++17 是否成立→何版本成立→已验证」。
文档: 顶层 README、docs/SOURCE_PAGES.md (页面→目录映射)、
docs/ERRATA.md (Part1 修正)、docs/ERRATA_part3.md (Part3 修正)。
另修复 tools/run.sh / run_qt.sh 的 ${1:?...} 引号语法 bug。
隔离 Qt 验证: ldd 0 系统 Qt 引用; 173/173 目标全绿; p03 offscreen 运行通过。
1 line
8.0 KiB
JSON
1 line
8.0 KiB
JSON
{"id":"58954437","type":"page","status":"current","title":"01.C++概述","version":{"by":{"type":"known","username":"ethanliu","userKey":"2c90931b6cfb654f016d5c69becc0001","profilePicture":{"path":"/images/icons/profilepics/default.svg","width":48,"height":48,"isDefault":true},"displayName":"刘浩","_links":{"self":"https://wiki.suncaper.net/rest/api/user?key=2c90931b6cfb654f016d5c69becc0001"},"_expandable":{"status":""}},"when":"2022-07-09T01:51:24.000Z","message":"","number":1,"minorEdit":false,"hidden":false,"_links":{"self":"https://wiki.suncaper.net/rest/experimental/content/58954437/version/1"},"_expandable":{"content":"/rest/api/content/58954437"}},"body":{"storage":{"value":"<ac:layout><ac:layout-section ac:type=\"two_right_sidebar\"><ac:layout-cell><h2><span>1.1 c++</span>简介</h2><p>“<span>c++</span>”中的<span>++</span>来自于<span>c</span>语言中的递增运算符<span>++</span>,该运算符将变量加<span>1</span>。<span>c++</span>起初也叫<span>”c with clsss”.</span>通过名称表明,<span>c++</span>是对<span>C</span>的扩展,因此<span>c++</span>是<span>c</span>语言的超集,这意味着任何有效的<span>c</span>程序都是有效的<span>c++</span>程序。<span>c++</span>程序可以使用已有的<span>c</span>程序库。</p><p><strong>库是编程模块的集合,可以在程序中调用它们。库对很多常见的编程问题提供了可靠的解决方法,因此可以节省程序员大量的时间和工作量。</strong></p><p>c++语言在<span>c</span>语言的基础上添加了<strong>面向对象编程</strong>和<strong>泛型编程</strong>的支持。<span>c++</span>继承了<span>c</span>语言高效,简洁,快速和可移植的传统。</p><p>c++融合了<span>3</span>种不同的编程方式<span>:</span></p><ul><li>c语言代表的过程性语言<span>.</span></li><li>c++在<span>c</span>语言基础上添加的类代表的面向对象语言<span>.</span></li><li>c++模板支持的泛型编程</li></ul><p><strong>c</strong><strong>语言和<span>c++</span>语言的关系<span>:</span></strong></p><p>c++语言是在C语言的基础上,添加了面向对象、模板等现代程序设计语言的特性而发展起来的。两者无论是从语法规则上,还是从运算符的数量和使用上,都非常相似,所以我们常常将这两门语言统称为“C/C++”。</p><p><strong>C语言和C++并不是对立的竞争关系:</strong></p><ol><li>C++是C语言的加强,是一种更好的C语言。</li><li>C++是以C语言为基础的,并且完全兼容C语言的特性。</li></ol><p>c语言和C++语言的学习是可以相互促进。学好C语言,可以为我们将来进一步地学习C++语言打好基础,而C++语言的学习,也会促进我们对于C语言的理解,从而更好地运用C语言。</p><h2><span>1.2 </span>可移植性和标准</h2><p> 假设为运行<span>windows 2000</span>的老式奔腾<span>pc</span>编写了一个很好用的<span>c++</span>程序,而管理员决定使用不同操作系统<span>(</span>比如说<span>Mac OS </span>或<span> Linux)</span>和处理器的计算机替换它。该程序是否可在新平台运行呢?当然,但是必须使用为新平台设计的<span>c++</span>编译器重新编译。但是是否需要修改写好的代码?如果不需要修改代码的情况下,重新编译程序后,程序依然运行良好,该程序是可移植的。</p><p> 程序是否可移植性有两个问题需要解决。第一是硬件,针对特定硬件编程的程序是不可移植的。第二,语言的实现,<span>windows xp c++ </span>和<span> Redhat Linux </span>或<span> Mac OS X</span>对<span>c++</span>的实现不一定相同。虽然我们希望<span>c++</span>版本与其他版本兼容,但是如果没有一个公开的标准,很难做到。因此,美国国家标准局<span>(American National Standards Institute,ANSI)</span>在<span>1990</span>年设立一个委员会专门负责制定<span>c++</span>标准<span>(ANSI</span>制定了<span>c</span>语言的标准<span>)</span>。国际标准化组织<span>(International Organization for Standardization</span>,<span>ISO)</span>很快通过自己的委员会加入到这个行列,创建了联合组织<span>ANSI/ISO,</span>制定<span>c++</span>标准。</p><p> 经过多年的努力,制定出了一个国际标准<span>ISO/IEC 14882:1998 </span>,并于<span>1998</span>年获得了<span>ISO</span>、<span>IEC(International Electrotechnical Committee,</span>国际电工技术委员会<span>)</span>和<span>ANSI</span>的批准。这个标准就是我们经常所说的<span>c++98</span>。它不仅描述了已有的<span>c++</span>特性,还对语言进行了扩展,添加了异常、运行阶段类型识别<span>(RTTI)</span>、模板和标准模板库<span>(STL).</span></p><p> 2003年,发布了<span>c++</span>标准第二版<span>(IOS/IEC 14882:2003),</span>这一版本对第一版修订了一些错误,但并没有改变语言特性,因此<span>c++98</span>表示<span>c++98/c++2003.</span></p><p> c++不断发展。<span>IOS</span>标准委员会于<span>2011</span>年<span>8</span>月批准了新标准<span>ISO/IEC 14882:2011,</span>该标准被称为<span>c++11,</span>与<span>c++98</span>一样<span>c++11</span>也新增了许多特性。</p><p> ISO c++标准还吸收了<span>ANSI c</span>语言标准,<span>c++</span>尽量做到是<span>c</span>的超集。意味着在理想情况下,任何有效的<span>c</span>程序都应该是有效的<span>c++</span>程序。</p><p> ANSI不仅定义了<span>c</span>语言,还 定义了一个<span>ANSI c</span>必须实现的标准<span>c</span>库。<span>c++</span>也在使用这个库,另外<span>ANSI/ISO c++</span>标准还提供了一个<span>c++</span>标准类库。</p><h2><span>1.3 </span>为什么<span>C++</span>会成功</h2><p> c++最初的目的是将<span>c</span>语言转变为<span>OOP</span>(面向对象程序设计)语言,但是<span>c++</span>后来并没有这么做,而是立足于程序的实际。因为在<span>c</span>语言方面大量投入的程序员使其完全丢掉<span>c</span>语言那种编程的思考方式,转而去接受一种新的语言,新的思维,那么将会导致这些程序员中大部分人在短时间内可能毫无成果,使其生产率降低。但是如果让这些<span>c</span>程序员在已有知识的基础上,再去学习<span>c++</span>语言,理解运用<span>OOP</span>,那么也只是在其已有思维的基础上进行扩展而已,这样可以保持其更好的生产率。</p><p> 简而言之,强迫程序员放弃<span>c</span>语言和<span>c</span>语言的思考方式,而去转到<span>OOP</span>上是需要代价的,但是从<span>c</span>语言转到<span>c++</span>所花费的代价就会小很多。所以也可以理解为<span>c++</span>的出现并不是去替代<span>c,</span>而是对<span>c</span>的扩展,所以在<span>c++</span>中既可以使用<span>c++</span>新特性,并且可以使用<span>c</span>的过程式思维来编写程序。</p></ac:layout-cell><ac:layout-cell><p><br /></p></ac:layout-cell></ac:layout-section></ac:layout>","representation":"storage","_expandable":{"content":"/rest/api/content/58954437"}},"_expandable":{"editor":"","view":"","export_view":"","styled_view":"","anonymous_export_view":""}},"extensions":{"position":"none"},"_links":{"webui":"/pages/viewpage.action?pageId=58954437","edit":"/pages/resumedraft.action?draftId=58954437","tinyui":"/x/xZKDAw","collection":"/rest/api/content","base":"https://wiki.suncaper.net","context":"","self":"https://wiki.suncaper.net/rest/api/content/58954437"},"_expandable":{"container":"/rest/api/space/2CT","metadata":"","operations":"","children":"/rest/api/content/58954437/child","restrictions":"/rest/api/content/58954437/restriction/byOperation","history":"/rest/api/content/58954437/history","ancestors":"","descendants":"/rest/api/content/58954437/descendant","space":"/rest/api/space/2CT"}} |