第二章 C++和标准库简介
2.2 C++语言新特性
2.1.1 模板
几乎所有STL库都是模板。
编译器不会为每种类型都生成代码,而只是为所要用的类型生成,因此你必须让你的模板函数在被调用的时候其实现是可见的,编译器才能编译该函数为特定的类型。因此,要使得模板可移植,你需要将函数的实现包含在头文件中,并且是内联(inline)函数。
无类型模板参数
即模板参数为值,而不是类型,编译时会被替换为常量。
例如:
bitset<32> flags32;
bitset<64> flags64;
注意:这里flags32和flags64是不同的类型。
Typename 关键字
关键字typename 指明它后面的标识符是一种类型。
例如:
template <class T>
class MyClass {
typename T::SubType *ptr;
};
这里指定SubType为一种类型,而不是T的静态变量。
成员模板
成员模板经常用于自动类型转换。
例如:
template <class T>
class MyClass {
public:
MyClass() {
T _value = T();
}
template <class U>
MyClass(const MyClass<U>& u_) {
assign(u_);
}
template <class U>
void assign(const MyClass<U>& u_) {
_value = u_.getValue();
}
T getValue() const {
return _value;
}
private:
T _value;
};
…
void foo() {
MyClass<double> dm;
MyClass<double> dm1(dm);
}
2.6.6 关键字explicit
关键字explicit可以防止将一个值隐式转换为一个对象,如果这个对象的类的构造函数是单个参数。一个常见的例子:一个集合的类用一个大小作为初始化参数,
class Stack {
explicit Stack(int size_); //创建一个大小为size_的栈
};
Stack s;
…
s = 4; //如果没有explicit 那么将创建一个大小为4的新栈并赋给s
第四章 工具
4.1 pairs
pairs的比较,first的优先级最高,比较时,先考虑first的大小,如果first相等,再比较second.
4.2 auto_ptr
不推荐使用,建议用boost smart pointer 代替。
4.3 Numeric Limits
C++标准库提供了numeric_limits,来替代和补充C宏。
numeric_limits 提供了类型安全,并且让程序员能写模板评估(evaluate)这些限制。
4.4 辅助函数(Auxiliary Functions)
std::max的参数必须是同一种类型,如果不同类型,要显示指定类型做隐式转换。
int i = 5;
long l = 10L;
//long max = std::max(i, l); Error
long max = std::max<long>(i,l);
分享到:
相关推荐
C++ Standard Template Library (STL) 是C++编程语言中不可或缺的一部分,它提供了一组高效、可重用的容器、迭代器、算法和函数对象。STL的核心思想是泛型编程,即通过模板来实现代码的复用,使得开发者可以处理不同...
STL(Standard Template Library,标准模板库)是C++编程语言中的一个重要组成部分,它提供了高效且灵活的数据结构和算法。这篇学习笔记将深入探讨STL的核心概念、主要组件以及其在实际编程中的应用。 首先,STL的...
《Visual C++程序设计学习笔记》是一份深入探讨VC++编程技术的综合资料,涵盖了从基础知识到实际系统开发的广泛内容。Visual C++是Microsoft公司推出的一种强大的集成开发环境,它集成了C++编译器、调试器以及MFC...
《Visual C++程序设计学习笔记》是一份深入探讨C++编程在Microsoft Visual Studio环境下的实践指南。这份笔记涵盖了从基础知识到高级技术的广泛内容,旨在帮助读者熟练掌握Visual C++的使用,提升软件开发能力。 一...
《王道C++46期学习笔记记录》是一份详细且深入的C++学习资源,旨在帮助编程初学者以及有经验的开发者进一步提升C++技能。C++是一种强大的、通用的编程语言,以其面向对象的特性、高效性能和丰富的库支持而闻名。这46...
12. **STL(Standard Template Library)**:STL是C++标准库的一部分,包含了容器(如vector、list、map等)、算法和迭代器,极大地提高了编程效率。 学习C-C++的基础,不仅需要理解和掌握上述知识点,还需要通过...
- **STL(Standard Template Library)**:深入理解容器、迭代器、算法的使用,以及自定义比较函数和迭代器适配器。 在学习过程中,不断实践和编写代码是巩固知识的关键。通过编写小程序、解决实际问题来加深对C++...
《C++程序设计学习笔记》是一份深入探讨C++编程技术的资料,旨在帮助学习者掌握C++语言的核心概念和编程技巧。这份笔记基于C++程序设计特别版,集成了作者在学习过程中的精华理解和实践心得,对于初学者和有一定经验...
《达内学生C++学习笔记》是一份专为初学者设计的C++教程,旨在提供清晰易懂、逐步深入的学习路径。这份笔记涵盖了C++语言的基础到进阶内容,是学习C++的理想辅助资料。 首先,C++是一种静态类型的、编译式的、通用...
C++ Standard Template Library(STL)是C++编程语言的一个重要组件,它提供了一系列通用的数据结构和算法模板,使程序员能够以一种标准化和高效的方式处理数据。STL的主要组成部分包括容器(containers)、迭代器...
《C++学习笔记经典(与C比较)》这份资料应该会详细讲解这些知识点,并通过实例来帮助读者深入理解C++与C的差异,以及如何在实际编程中应用C++的特性和功能。这份资料可能会涵盖基本语法、类和对象、模板、STL的使用...
5. **STL(Standard Template Library)**:STL是C++的标准库,包含容器(如vector、list、set等)、迭代器、算法和函数对象,为程序员提供了高效的数据结构和算法。 6. **异常处理**:C++提供了异常处理机制,通过...
标题"Cpp.rar - C++学习笔记"暗示了这份压缩包可能包含一系列关于C++的学习资料,比如笔记、代码示例或者教程。这些笔记可能会涵盖C++的基础语法、类与对象、模板、异常处理、STL(标准模板库)、内存管理等方面。...
C++ SLS(Standard Library Style Guidelines)是一组用于编写C++标准库的编码规范,旨在提供高质量、统一的代码风格。这些指南对于任何参与C++编程,尤其是进行课程设计或大型项目开发的人来说都是极其重要的。以下...
本篇学习笔记主要涵盖了前三章的内容,重点关注STL(Standard Template Library,标准模板库)中的容器、特别是vector的使用,以及迭代器的概念。接下来我们将详细探讨这些知识点。 首先,STL是一个强大的工具集,...
《C++学习笔记》是一部非常实用的资源,适合那些对C++编程语言有着浓厚兴趣或者正在学习C++的初学者。这份笔记详细介绍了C++语言的基础知识、核心概念以及高级特性,旨在帮助读者掌握C++编程的核心技能。 C++是...
这个“C & C++学习笔记集合”显然是一份综合性的资源,旨在帮助学习者深入理解和掌握这两种语言。 C 语言是基础,它的语法简洁明了,对内存管理有直接的控制,是理解计算机底层工作原理的良好起点。C 语言的核心...
10. **STL(Standard Template Library)**:STL是一组通用的C++模板类和函数,包括容器、迭代器、算法和函数对象,它极大地提高了代码的效率和可读性。 11. **I/O流**:C++的I/O流库使得输入输出操作更加直观和...
本学习笔记将深入探讨C++的基础、核心概念以及高级特性,帮助读者从初学者到熟练掌握C++。 一、C++基础 C++的基础包括基本语法、数据类型、变量、运算符、流程控制(如if语句、switch语句、for循环、while循环)和...
6. **STL(Standard Template Library)标准库**:C++的STL包含容器(如vector、list、set等)、迭代器、算法和函数对象。熟练使用STL可以提高代码效率,简化编程任务。 7. **异常处理**:C++的异常处理机制允许...