c++ 自己遇到的编程陷阱或技巧
2014-04-30 22:24
260 查看
技巧
1.获得类中属性的引用 (比如kaldi中的matrix,重载了(),返回值是个引用,就可以实现 ()= 的效果了)int &Cls::cite(){ return b; //b in Cls }
2.define中#的作用,对宏参数进行字符化操作。及其他有用的宏命令
#define FUN(fun) \ cout<<#fun<<endl; FUN(fun(123)); //会输出 fun(123) #pragma message("this is message ") //编译器输出打印信息,但是不退出。 可以用来检查头文件的调用 # error ("Error") //直接退出
3.检测Nan,inf
检测nam用 a==a ,如果是a=nan,则上式不成立。
检测inf,如果有boost,则先引用头文件
#include </usr/include/boost/math/special_functions/fpclassify.hpp>
然后使用 isinf(a)
陷阱
1.map中最好放结构体的指针而不是结构体本身。自己做的 3D特效五子棋对战平台,当release的时候,存有结构体的map会报错。猜测原因:在函数中生成结构体后,虽然装入到了map但是函数结束后会释放。 (不一定对,应为debug模式下没错)
2.map中边遍历,边删除一些key会报错。
自己用如下方式解决,(就是多设置了一个变量)
map <unsigned long long,pSamfmt>::iterator it_tp=it_fmt; it_fmt++; mp_fmt.erase(it_tp); free(fmt);3.使用strtok后会把原来字符串中指定的字符串变为0,所以最好用个副本。
pC=strtok(fmt->id,"_"); fmt->rd1=atoi(strtok(NULL,"_")); fmt->rd2=atoi(strtok(NULL,"_"));
4.虚函数,应该只对使用指针时有用
void demo1(){//有效果 B *b=new B(); A * a=b; a->f(); } void demo2(){//加不加virtual都执行a中定义的函数 B b; A a=(A)b;//或者A a=b; a.f(); }
5. stringstream 清空的问题
目前为止感觉.clear()没用需要用.str("") ,如果要转为char则需要.str().c_str();
//未完待续……
相关文章推荐
- js小技巧(自己遇到的一些技巧)
- C++编程技巧降低编译时间
- [编程技巧] C++中优化BOOL 变量的声明
- 自己在VB编程过程中遇到的--不能加载MSCOMCTL.OCX提示
- C++ 编程中遇到的一些实际问题
- windows下java JNI编程技巧——JAVA调用c/c++(2)
- c++的一些编程技巧和细节
- C/C++语言经典实用趣味程序设计编程百例精解--大部分是自己写的(1)
- 关于winodows下编程c++遇到的引用文件路径问题
- C++编程技巧
- C/C++ 常见编程技巧
- windows下java JNI编程技巧——JAVA调用c/c++
- Android C编程技巧和C/C++开发测试
- 编程中遇到的一些头文件(c++)
- C++编程技巧减少编译时间
- windows下java JNI编程技巧——JAVA调用c/c++(3)
- 【C++编程技巧】
- C/C++面试遇到的几个知识盲点以及编程问题
- C/C++语言经典实用趣味程序设计编程百例精解--大部分是自己写的(2)--上
- C++与C的一些区别(自己学习中遇到的)(未完待续)