行云

行至水穷处,坐看云起时。

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
1 异常规格(exception specification)
用来指定某个函数可能抛出哪些异常,例如:
void fun() throw(bad_alloc); //fun()只能丢出bad_alloc异常
void fun() throw();              //fun()不抛出任何异常
void fun() throw()(E1, E2, E3); //fun()只能丢出E1, E2, E3异常
 
2 命名空间
定义命名空间
namespace uvsjoh {
    int a;
    void fun() { cout<< "uvsjoh::fun" << endl; }
};
namespace是开发的,你可以在不同模块中定义和扩展namespace。
例如可以在同一文件中同时出现如下定义
namespace uvsjoh {
    int a;
void fun() { cout<< "uvsjoh::fun" << endl; }
};
 
namespace uvsjoh {
int b;
void fun2() { cout << "uvsjoh::fun2" << endl; }
};
当然它们也可以出现在不同的文件中。
不要轻易使用using directive。
using directive等于将所有namespace中的名字声明于namespace之外。这将容易造成名称冲突。
所有,如不场合不甚清楚(例如不清楚究竟是在头文件、模块里还是程序库里),你不应该使用using directive。事实上在头文件中使用using directive是相当不明智的。
如果程序很小,那么直接使用using namespace std;会很方便。
 
3 可移植的main()
根据C++标准只有两种main()是可移植的
int main()
{
    ...
}
int main(int argc, char *argv[])
{
    ...
}
4 类型的名字
typeid(type).name()
 
5 捕获异常
捕获任何异常,一般用于异常发生时执行清理工作
try {
        ...
}
catch (...) {
//clean up
throw;          // - rethrow the exception
}
 
6 STL智能型指针auto_ptr --   解决在异常处理过程中的资源遗失问题。
智能型指针保证,无论在何种情形下,只要自己被销毁,就一定连带释放其所指资源。
智能型指针本身就是区域变量,所以无论是正常退出,还是异常退出,只要函数退出,它就一定会被销毁。
class A;
std::auto_ptr<A> ptr(new A);
当超出作用域或异常退出时A的虚构函数会被自动调用。
好的建议是:始终使用const std::auto_ptr
posted on 2012-04-06 13:45  windflying  阅读(246)  评论(0)    收藏  举报