首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 计算机考试 > 等级考试 > 复习指导 >

C++基础解析八

2008-11-18 
C++StandardLibrary学习笔记

    几乎所有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);
  }
  关键字
  explicit
  关键字explicit可以防止将一个值隐式转换为一个对象,如果这个对象的类的构造函数是单个参数。一个常见的例子:一个集合的类用一个大小作为初始化参数,
  class Stack {
  explicit Stack(int size_); //创建一个大小为size_的栈
  };
  Stack s;
  …
  s = 4; //如果没有explicit 那么将创建一个大小为4的新栈并赋给s
  工具
  pairs
  pairs的比较,first的优先级最高,比较时,先考虑first的大小,如果first相等,再比较second.
  auto_ptr
  不推荐使用,建议用boost smart pointer 代替。
  Numeric Limits
  C++标准库提供了numeric_limits,来替代和补充C宏。
  numeric_limits 提供了类型安全,并且让程序员能写模板评估(evaluate)这些限制。
  辅助函数(
  Auxiliary Functions
  )
  std::max的参数必须是同一种类型,如果不同类型,要显示指定类型做隐式转换。
  int i = 5;
  long l = 10L;
  //long max = std::max(i, l); Error
  long max = std::max<long>(i,l);

 


3COME考试频道为您精心整理,希望对您有所帮助,更多信息在http://www.reader8.com/exam/

热点排行