Effective C++ 条款53-55 杂项讨论 学到这里, Effective C++至此也算是告一段落了, 还剩下一些杂七杂八的讨论, 我们将在本文逐一列举. 条款53 : 不要忽视编译器的警告 我们应严肃对待编译器发出的警告信息, 努力在你的编译器最高警告级别下争取无警告的荣誉. 同时也不要过度依赖编译器的报警能力, 有些可能导致运行崩溃的错误编译器无法准确检测. 条款54 : 让自己熟悉包括Tr1在内的标准程序库Tr1其实是早期的 2025-01-31 #Effective C++
Effective C++ 条款49-52 内存分配 条款49 : 了解new-handler的行为条款50 : 了解new和delete的合理替换时机条款51 : 编写new和delete时需固守常规条款52 :写了placement new也要写placement delete 条款49-52中详细讲述了定制new和delete的实现, 加上前面所讲述的智能指针及资源管理类, 让我们对内存管理有了比较深刻的认知. 但是这部分有些内容经查证已经相对 2025-01-30 #Effective C++
Effective C++ 条款48 模板元编程(TMP) 条款48 : 认识template元编程 在条款47我们主要了解了萃取器这种模板元编程, 也初步进入了模板元编程的世界. 在本条款中, 我们将继续认识模板元编程, 认识其必要性和应用场景, 相比于条款47讲的还算比较深入,本条款真的就只是简介, 因为其体量确实非常庞大, 甚至可以单独作为一个学科研究. Template metaprogramming, 模板元编程, 简称TMP, 是编写temp 2025-01-22 #Effective C++ #模板
Effective C++ 条款47 萃取器 条款47 : 请使用traits classes表现类型信息 traits classes(萃取器类), 如你所见萃取器其实是一个模板类, 在C++中萃取器是一个神奇且有趣的存在, 它被广泛引用于标准库STL的编写中, 我们将在本条款中了解萃取器的功能及实现, 初步踏入模板元编程的世界. 模板元编程的初步认知很多人在第一次听到”模板元编程”时一定觉得非常高大上, 但是实际上我们可以简单认知其为针 2025-01-16 #Effective C++ #模板 #萃取
Effective C++ 条款46 友元非成员函数 条款46 : 需要类型转换时请为模板定义友元非成员函数 本条款是条款24的延申讨论, 在引入模板的前提下, 如果我们想实现某些隐式类型转换的操作, 会需要比以往多一些额外的操作, 让我们通过本条款来理解. 前提引入还记得条款24中的Rational吗, 这是一个有理数类, 内部包含分子和分母, 可以由int隐式转换而来, 当时条款24中讨论的核心是如何让Rational支持混合运算, 就像下面这 2025-01-14 #Effective C++ #模板
Effective C++ 条款45 运用成员函数模板接受所有兼容类型 条款45 : 运用成员函数模板接受所有兼容类型 本条款中我们将会以智能指针为例, 介绍如何通过成员函数模板使一个模板类可以接受所有兼容类型. 我们先来构建一个简单的继承体系 : 123456class Top { ... };class Middle: public Top { ... };class Bottom: public Middle 2025-01-13 #Effective C++ #模板
Effective C++ 条款44 防止代码膨胀 条款44 : 将与参数无关的代码抽离templates 我们知道代码重复和过度的inline都可能导致代码膨胀, 而在模板中会发生比较隐晦的代码重复, 我们应当尽力去避免代码重复的情况发生, 而最核心的方法就是将与参数无关的代码抽离templates, 让我们通过本条款进行了解. 在本条款中我们将会了解 : 在模板中什么情况下会发生代码膨胀? 如何缓解这种代码膨胀? 在缓解代码膨胀后如何知道 2025-01-12 #Effective C++ #模板
Effective C++ 条款43 模板基类的继承 条款43 : 学习处理模板化基类内的名称 在本条款中我们将探讨继承与模板共同使用时的注意事项, 有些我们通过学习继承得来的直觉在这里可能不再适用, 当我们从Object Oriented C++ 跨进 Template C++, 继承就不像以前那样畅行无阻了. 发现问题我们先引入一个例子, 假设我们要写一个程序, 他能够传送信息到若干不同公司去, 大部分公司传输的信息不需要加密, 少部分公司传输 2025-01-07 #Effective C++ #继承 #模板
Effective C++ 条款42 typename 条款42 : 了解typename的双重意义 本条款中我们将了解typename的两种使用场景, 对typename的内涵及使用加深认知. template声明式在template的声明中, template<class T>和template<typename T>都是被允许的, 这两种写法并没有任何差别, C++对这两种写法一视同仁, 但是在真正使用中, 作者还是建议 2025-01-05 #Effective C++
Effective C++ 条款41 隐式接口和编译期多态 条款41 : 了解隐式接口和编译期多态 从本条款开始, 我们将开始讨论模板与泛型编程, templates最初知识为了建立类型安全的泛用容器, 但在不断的发展中泛型编程的观念逐渐成型, 使得我们拥有了将写出的代码和其所处理的对象类型彼此独立的技术. 在本条款中我们将了解两个泛型编程中的核心概念–隐式接口和编译期多态. 在面向对象编程中, 显示接口和运行期多态是我们主要研究的对象 : 显示接口 2025-01-03 #Effective C++ #模板