Chinaunix首页 | 论坛 | 博客
  • 博客访问: 806557
  • 博文数量: 330
  • 博客积分: 9641
  • 博客等级: 中将
  • 技术积分: 3181
  • 用 户 组: 普通用户
  • 注册时间: 2007-01-19 14:41
文章分类

全部博文(330)

文章存档

2012年(17)

2011年(135)

2010年(85)

2009年(57)

2008年(36)

我的朋友

分类: C/C++

2011-06-20 23:49:37

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。
阅读(487) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~