微博:
@TankyWoo基
新博客:
TankyWoo

《C++标准程序库》学习笔记1--第二章&第三章

 ————————— 第二章 —————————

1.(P11)

C++规定:除了以typename修饰外,template内的任何标志符号都被视为一个值(value)而非一个型别。

eg.

 

template <class T> 
class MyClass{ 
    typename T::SubType 
*ptr; 
};

 

 

这里typename指出SubType是class T中定义的一个型别,因此ptr是一个指向T::SubType的指针,否则SubType会被当作一个static成员,于是:

T::SubType *ptr被认为是SubType与ptr的乘积。

 

2.(P12)

template class 的 member template问题:

下面例子,即使两个型别之间可以自动转换,如int和double,如果我们对assign()使用不同的template型别,也会出错。

 

template <class T> 
class MyClass{ 
private
    T value; 
public
    
void assign(cosnt MyClass<T>& x) 
    { 
        
// x must have same type as *this 
        value = x.value; 
    } 
    ... 
};

 

 

再看这个:

 

template <class T> 
class MyClass{ 
private
    T value; 
public
    template 
<class X>  // member template 
    void assign(cosnt MyClass<X>& x) 
    { 
        
// allows different template types 
        value = x.getValue(); 
    } 
    T getValue() 
const
        
return value; 
    } 
    ... 
};

 

 

现在,assign()的参数x和*this的型别并不相同,所以两个类也就不同
不能再直接存取MyClass<>的private成员和 protected成员,取而代之,
此例中使用了getValue()

 

3.(P14)

对基本型别的显示初始化

如果采用不含参数、明确的constructor调用语法,基本型别会被初始为

eg.

 

int i1;   // undefined value
int i2 = int();   // initialized with zero

 

 

 

4.(P16)

异常问题。

   ①.异常处理不是错误处理

   ②.  void f() throw(xxx) 是f()抛出XXX类型的异常,

      而void f() throw()  是指f()抛出任何异常,这里好多人容易弄错。

 

5.(P16)

命名空间。

eg.

 

namespace tankywoo{ 
    
class A; 
    
class B; 
    ... 

...

 

 

则using tankywoo::A会使A成为当前作用域内代表tankywoo::A的同义字

而using namespace tankywoo会使namespace内的所有名字曝光(A和B)。

 

 ————————— 第三章 —————————

 6.(P23)

命名空间
上一篇也讲过。
使用C++标准程序库的任何标识符时,有三种选择:(以下都以cout为例)
①直接指定标识符:

std::cout << "Tanky Woo" << std::endl;

 

②使用using declaration,可使我们不再需要加上”std::”

   using std::cout;
   cout 
<< "Tanky Woo" << std::endl;

 

③使用using directive,那么std内定义的所有标识符都有效。

  using namespace std;
  cout 
<< "Tanky Woo" << endl;

 

 

7.错误处理和异常处理
异常处理这块接触的少,而且第三章这里也是简略的讲到,所以这里先放着,有经验了再补。

 

8.配置器(Allocators)
同上。 

 

 

posted on 2011-01-23 18:44  Tanky Woo  阅读(2454)  评论(4编辑  收藏  举报

导航