Files
scuc-qt-course/tools/wiki_data/bodies/58954437.json
T
张宗平 13b3ebbe14 课程代码仓库初始化:Part1 (144) + Part3 (29) 全量生成与验证
把川大 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 运行通过。
2026-06-30 14:16:55 +08:00

1 line
8.0 KiB
JSON
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{"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"}}