C++语法杂项1

1.拷贝构造函数必须为引用或者常量引用,否则编译无法通过。

因为是普通的传值,需要先构造临时对象,会再次调用拷贝构造函数,造成递归。所以拷贝构造函数的入参不能为普通传值。


2.typename

template<class T>

class MyClass{

typename T::SubType *ptr;

};

typename指出SubType是Class T中定义的一个型别,ptr是一个指向T::SubType型别的指针。

没有typename,SubType会被当成Class T类中的一个static成员。


定义内部型别

class Q {

typedef int SubType;

}


class Q {

class SubType;

};


3.非型别模板

例如:bitset<20> flags20;


4.缺省模板参数

template <class T, class container = vector<T> >

class MyClass;


5.成员模板

template<class T>

class MyClass {

T value;

template<class X>

void assign(const MyClass<X>& x);

}

Template Constructor是成员模板的一种特殊形式。Template constructor通常用于“再复制对象时实现隐式型别转换”。

注意:template constructor并不隐藏implicit copy constructor。


6.异常抛出

void f() throw();// 不抛出任何异常

void f() throw(bad_alloc, bad_cast);// 抛出bad_alloc或bad_cast异常

void f(); // 可能抛出任何异常


7.namespace

using declaration:using std::cout;

using directive:using namespace std;

定义名字空间:

namespace josuttis {

class File;

}


8.如果某个函数的一个或多个参数型别,定义与函数所处的名字空间中,那么可以不为改函数指定名字空间,这个规则称为Koenig lookup


9.reinterpret_cast

如何使用?


10.常数静态成员初始化

class Myclass{

static const int num = 100;

};

const int Myclass::num;//  需要定义一个空间,VS2005不进行定义也可以正常运行。

TODO:确认标准如何规定


11.非常量静态成员的初始化

class Myclass{
public:
static int num ;
};
int Myclass::num = 100;//  需要定义一个空间


12.异常分类

语言本身支持的异常:

bad_alloc,bad_cast,bad_typei,bad_exception

C++程序库所发生的异常:

logic_error,及其之类invalid_argument,length_error,out_of_range,domain_error

程序作用域之外发生的异常:

runtime_error及其之类range_error,overflow_error,underflow_error

程序库所抛出的异常:

range_error,out_of_range,invalid_argument,bad_alloc及客户代码中抛出的异常。


13.const char* p, char* const p

const char* p p指向的内如不能改变。

char* const p 指针p不能改变。p不能再指向其他数据。


14.只有当对象完全构造成功,才有可能于将来调用其构造函数。

ClassB (Class A& val1, ClassA& val2):ptr1(new ClassA(val1),ptr2(new ClassA(val2){}存在资源泄露可能,解决方法是使用智能指针。


15.数值极限

头文件:<limits>

范例:numeric_limits<int>::min()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值