1、定义数组并初始化赋值时 char ca[10] = {'a'};
ca[0]初始化为'a',其余未明确赋值的元素也同时被初始化为0;
2、VC6中查看程序生成的汇编代码时需如下面设置:
Project->Settings->C/C++->Category:Listing Files->Listing file type
中根据自己的需要选择即可,例如:Assembly,Machine Code,and Source
3、c++ 小程序中atexit可以挂接程序退出时需要执行的函数,而且可以挂接多个,执行顺序与挂接顺序相反
4、 try
{
throw "Memory allocation failure!";
}
//catch(...)//捕获所有异常
catch(char *strErr)
{
cout<<strErr<<"/n";
}
5、自动指针保存的对象在指针生命结束时可以自动释放动态生成的对象资源
#include <memory>
auto_ptr<stri> apObj = (auto_ptr<Obj>)new Obj(...);
Obj *pObj = (Obj *)apObj.get();
6、sprintf简单高效,但是有很多缺陷,使用时要注意
7、小心不要在循环中使用unsigned 类型变量自减<0作为退出条件
8、写一个函数一定要检查输入和输出
9、类设计时一定要保持最小开放原则,尽量使用protect或private
10、使用变量时应保持最大利用率,如:不会出现负值时尽量用unsigned
11、可以通过重载operator new和operator delete来跟踪一些内存泄漏,也可以在类域里重载
12、main函数可以被自己调用,也可以被全局函数调用
13、类可以嵌套定义,即在一个类中再定义一个新类
14、数组元素个数可以通过sizeof(arr)/sizeof(arr[0])得到
15、获取资源操作一定要进行资源有效性判断,涉及到交互的操作一定要有超时判断
16、通过数组下标访问元素快于指针,加法快于乘法快于除法,某些乘法可以通过移位实现
17、不要在类析构中抛出异常,如果异常传递到类外漏网的话会使程序崩溃掉。
18、关于定义类成员指针:
int main(void)
{
class myclass
{
public:
myclass(int n):m_n(n){};
int m_n;
void myfun(int n){m_n = n;};
};
myclass cla(5);
//int *pn = &myclass::m_n; //error
int *pnn = &cla.m_n; //ok
int myclass::* pmn = &myclass::m_n; //ok
cla.*pmn = 6; //ok
cout << cla.m_n <<"/n"; //6
//void (*pmfun)(int n) = &myclass::myfun; //error
//void (*pmfun)(int n) = &cla.myfun; //error
void (myclass::*pmfun)(int n) = &myclass::myfun;//ok
(cla.*pmfun)(8); //ok
cout << *pnn << "/n"; //8
return 0;
}
19、若delete一个指针出错,要么指针无效,要么对空间做了越界操作!