pdf文档 Irksome C++

3.03 MB 15 页 0 评论
语言 格式 评分
英语
.pdf
3
摘要
文档讨论了C++标准库中的多个不一致和令人费解的问题。主要包括命名惯例的问题,如as_const和to_underlying的不同命名习惯,as_const_view的概念以及它的命名意义。还提到了vector<bool>的特殊实现导致的非容器行为,以及标准库中bool被视为整数类型引起的混淆。此外,文档还涉及了floating-point字面量的不一致行为,std::max和std::min的返回问题,以及迭代器和数组的命名问题。
AI总结
《Irksome C++》是Walter E. Brown对C++语言及标准库中一些不一致、令人感到恼人的地方的总结和批评。以下是文档的核心观点和关键信息的总结: ### 1. **命名不一致与标准库问题** - **std库命名不一致**:标准库中的一些函数或类型名称设计不统一,例如`as_const`和`to_underlying`、`addressof`和`tolower`等,导致学习和记忆成本增加。 - **视图与函数的混淆**:例如`std::as_const_view`是一个类型,而`std::as_const`是一个函数模板,名称的“as_”和“to_”前缀的使用不够一致。 - **`vector`问题**:`vector`不符合常规容器的要求,导致与标准库算法的兼容性问题。 ### 2. **类型系统的怪癖** - **类类型与联合类型**:C++中“类类型”和“类”(`class`)的概念存在区别,例如联合类型是类类型但不是类。 - **布尔类型的处理**:C++将`bool`视为整数类型,可能导致混淆,例如`true + false`或`42 * true`等表达式的合法性。 - **`nonesuch`类型的问题**:由于C++标准的演进,`nonesuch`类型在某些情况下可能会意外地被初始化。 ### 3. **迭代器与容器问题** - **迭代器的表示**:`end`迭代器表示超出范围的位置,而非实际元素,这种命名可能导致新手对其含义产生混淆。 - **`in_out_result`的命名**:标准库中`in_out_result`的名称不够直观,`copy_result`等别名的存在增加了学习成本。 ### 4. **浮点数与计算问题** - **浮点数字面量的不一致性**:由于浮点数的评估方式可能因编译器和平台不同而变化,例如`3.14F`的实际类型可能不是`float`。 - **`max`和`min`函数的实现问题**:`max`返回的是第一个等价的参数,而不是更大的值,这种行为可能导致意外结果。 ### 5. **改进建议与总结** - **命名准确性**:C++的命名应更加直观和技术准确,避免负面表述和歧义。 - **函数返回类型设计**:例如`max`函数应避免返回引用,而应返回值,以防引用过早失效。 - **语言与库的完善**:虽然C++无法opor逆所有设计错误,但应努力减少明显的不一致性和问题。 ### 作者背景 Walter E. Brown是C++领域的资深专家,参与了C++标准化工作,并提出了许多重要的库功能,如`gcd/lcm`、`cbegin/cend`等。他认为C++虽然强大,但仍需改进,以减少学习和使用中的痛点。 总结而言,文档揭示了C++语言及标准库在命名、类型系统、算法实现等方面的不一致性和问题,希望通过增强社区对这些问题的意识,推动语言和库的进一步完善。
P1
P2
P3
P4
P5
P6
P7
P8
P9
P10
P11
P12
下载文档到本地,方便使用
- 可预览页数已用完,剩余 3 页请下载阅读 -
文档评分
请文明评论,理性发言.