2.2 C++新语言特性
2.2.1 template
Nontype template 参数: bitset<32> flag32;
Default Template parameters:
template <class T, class container = vector<T> >
class MyClass;
关键字typename:
template <class T>
class MyClass{typename T::SubType *ptr; ... };
//typename用来作为类型之前的标志符号
//Subtype为内部类型定义,如typedef int SubType;
成员模板:
template <class T>
class MyClass{
template <class X>
MyClass(const MyClass<X>& x);
template <class X>
void assign(const MyClass<X>& x){value = x.getValue();}
};
//注意:tempalte constuctor(使用成员模板的构造函数)不隐藏implicit copy constructor(隐式复制构造函数)。
Nested Tempalte Classes(嵌套类):
template <class T>
class MyClass{
template <class T2>
class NestedClass;
};
2.2.2 基本type的显示初始化
int t2 = int(); //initialized with zero.
2.2.3 异常处理
2.2.4 命名空间
using joauttis::File;比using namespace josuttis;更好,后者会将namespace中的所有名字曝光。
2.2.5 bool类型
2.2.6 关键字explicit
禁止单参数构造函数被用于隐式类型转换。如explicit Stack(int size); 这使得Stack s = 40;不能通过编译。
2.2.7 新的类型强制转换--static_cast, dynamic_cast,const_cast, reinterpret_cast
2.2.8 常静态成员的初始化
class Myclass{
static const int num =10;
int elems[num];
...
};
const int MyClass::num; //必须在cpp文件中定义,此处不初始化。
2.2.9 main()的定义式
int main()
int main(int argc, char *argv[])