1.stl调试
在调试一个被调用的库时,gdb中step跟进,这时,如果用next单步调试,就会跳出这个调用的库,如果用step,又会陷入c++的stl容器里面出不来,怎么办?
在调用库的入口函数处设置断点,gdb中step跟进库调用后,用next单步调试,就会跳到调用处了。
2.未使用的变量,编译时去除warnning
int aunused;
修改成: int aunused __attribute__((unused));
如果是函数参数又有另外3种方法,例如: void function(int arg) {}
方法一:void function(int /* arg */) {}
方法二:void function(int arg) { (void)arg; }
方法三:void function(int arg) { #pragma unused arg; } 这一项必须编译器支持,但应该避免。g++不支持。
3.常量
char *a = "ai"; 这个指针变量a不可以被赋值,因为指向常量。
void function(std::string &str) {} 这个函数不可以这样调用function("ai"); 因为不可以引用一个常量。
函数改成void function(std::string str) {} 或者 void function(const std::string &str) {} 则可以用常量当做参数。
4.new一个对象的两种方法
classA *p = new classA;
classA *p = new classA();
这二者都会调用classA的默认构造函数,但如果是有特殊构造函数的对象(如带有参数),可以把参数写到后者当中,即直接调用匹配的构造函数。(如有一个构造函数classA(int num);则可以这样调用:classA *p = new classA(3);)
如果不是POD类型的话,是没有区别的,都是调用默认构造函数。如果是POD类型,则前者不会初始化,后者会初始化为0。
阅读(541) | 评论(0) | 转发(0) |