zoukankan      html  css  js  c++  java
  • More Effective C++ 条款35 让自己习惯于标准C++ 语言

    (由于本书出版于1996年,因此当时的新特性现在来说可能已经习以为常,但现在重新了解反而会起到了解C++变迁的作用)

    1. 1990年后C++的重要改变

        1). 增加了新的语言特性:RTTI,namespaces,bool,关键词mutable和explicit,enums作为重载函数之自变量所引发的类型晋升转换,以及"在class 定义区内直接为整数型(intergral) const static class members设定初值"的能力.

        2). 扩充了Templates的特性:允许member templates存在,接纳"明白只是template当场实例化"的标准语法,允许function templates接受"非类型自变量(non-type atguments)",可用class templates作为其他template的自变量.

        3). 强化了异常处理机制(Exception handling):编译期间更严密地检验exception specifications,允许unexcpted函数抛出bad_exception对象.

        4).修改了内存分配例程:假如operator new[]和operator delete[],内存未能分配成功时由operator new/new[]抛出一个异常,提供一个operator new/new[]新版本,在内存分配失败后返回0.

        5). 增加了新的转型形式:static_cast,dynamic_cast,const_cast和reinterpret_cast

    2. 标准程序库的能力

        1). 支持C标准函数库.

        2). 支持strings.

        3). 支持国别(本土化,localization).不同文化使用不同字符集以及不同的日期,时间,排序事物,货币值等显式习俗.

        4). 支持I/O.

        5). 支持数值应用.支持复数和数组类,提供常用函数,包括"部分和(partial sum)"以及"相邻差值(adjacent difference)".

    3. 标准库特点

        1). 高度模板化——每一样东西几乎都是template.例如string是basic_string<char>的typedef(basic_string还可支持wide char,unicode char),IOstreams也是template,它有个类型参数(type parameter)用来定义streams(数据流)的字符类型.

        2). 所有成分都位于namespace std内.

    4. Standart Template Library(STL)

        1). STL占据了C++标准库的大部分,主要包括三部分:容器(container),迭代器(iterator),泛型算法(algorithm).其中容器持有对象,迭代器用于遍历容器元素,泛型算法则基于迭代器实现不依赖于具体类型的函数模板.

        2). STL是可扩充的,只要遵循STL的标准,可以将自己的容器,迭代器,算法等结合STL使用.(要使自定义的迭代器适用于STL的泛型算法,需要了解C++的traits技法,见Effective C++ 条款47)

  • 相关阅读:
    [UVA 10603]Fill
    [BZOJ 4152][AMPPZ 2014]The Captain
    P4779单源最短路径(标准版)
    P3372 线段树模版1
    P1776宝物筛选
    最长上升子序列模版
    01背包问题
    SHOI2008 汉诺塔
    log P1080国王游戏
    最小生成树模版 Kruskal
  • 原文地址:https://www.cnblogs.com/reasno/p/4879001.html
Copyright © 2011-2022 走看看