c++技巧

来源:互联网 发布:海通期货软件 编辑:程序博客网 时间:2024/06/16 09:51

1 typedef 为现有类型创建一个新的名称

如:typedef vector<类::类> SW  SW即为vector<类::类>的名称

2、字符串拷贝

    memcpy

       函数原型: void *memcpy(void *dest, void *src, unsigned int count);

       用法: memcpy(char[] name, vector<string> names.ct(i).c_str(), strlen(names.at(i).c_str())+1);


const char *c_str();  c没有string类型,通过string类对象的成员函数c_str()把string对象转换成c中的字符串样式。

3、c++new 和c malloc区别

当你new一个对象的时候,不仅仅为对象分配了空间,同时调用了对象的构造函数。同样的,当你delete一个对象时,在内存释放之前会调用对象的析构函数。

如果你使用malloc和free,构造函数和析构函数都不会被调用。对于没有构造函数和析构函数的特殊情况下,这个小例子不会起作用。

4、大小写转换

CString str = "abc";        小写转大写
str.MakeUpper();

MakeLower()     大写转小写

5、const

三种形式

 const int a=1;

int b=2;

1 const int * ptr1=&a;

2  int * const ptr2 = b;

3 const int * const ptr3 = a;

看这种东西,从右向左看。第一个中,ptr1之后是*号,说明ptr1是指针,接着为int,说明是指向int对象的指针,最后是const,则表示是指向const int 型对象的指针。说明ptr1不能改变a的值,但是可以指向别的const int 型的对象(是个常量)。

第二个中,先表明了ptr2是个常量,再说明是指针,最后是指向int型的,总的意思是,ptr2是一个指向int对象的常量指针,那么指针的值(也就是ptr2地址单元中存储的对象地址)不能改变,即ptr2永远指向b,但是可以改变b的值。b

的值变了,*ptr2也会变。

第三个中,前后都限定为const ,则既不能通过ptr3改变a的值,ptr3也不能再指向其他对象。

6、类型转换

void* 转int

int a = *((int*)p);

7、引用&

注意在函数的引用中,所引用的值会变化

int add(int &a){return a++;}
int d = 32;int e = add(d);
结果:   d = 33; e = 32;

8、内联函数inline

在c/c++中,为了解决一些频繁调用的小函数大量消耗栈空间(栈内存)的问题,特别的引入了inline修饰符,表示为内联函数。

栈空间就是指放置程序的局部数据(也就是函数内数据)的内存空间。

inline仅是一个对编译器的建议

inline bool Stack::push(string &val){if(!full()){m_stack.push_back(val);return true;}elsereturn false;}

9、二级指针的使用(待研究)
GeoBaseData* geoData = (GeoBaseData*)(*pData);
10、
printf("%d,%d\n", *p,*(++p));   
在执行printf时,括号里的参数是从右往左的顺序进行读取的,也就是说先执行 *(++p),也就是p先加一再指针,指向的是arr第2个元素3,然后在执行*p

原创粉丝点击