c++ 要注意的问题

来源:互联网 发布:申请网络出版要多久 编辑:程序博客网 时间:2024/04/29 09:46
  • typedef的两个陷阱   

陷阱一: 
记住,typedef是定义了一种类型的新别名,不同于宏,它不是简单的字符串替换。比如: 
先定义: 
typedef   char*   PSTR; 
然后: 
int   mystrcmp(const   PSTR,   const   PSTR); 

const   PSTR实际上相当于const   char*吗?不是的,它实际上相当于char*   const。 
原因在于const给予了整个指针本身以常量性,也就是形成了常量指针char*   const。 
简单来说,记住当const和typedef一起出现时,typedef不会是简单的字符串替换就行。 

陷阱二: 
typedef在语法上是一个存储类的关键字(如auto、extern、mutable、static、register等一样),虽然它并不真正影响对象的存储特性,如: 
typedef   static   int   INT2;   //不可行 
编译将失败,会提示“指定了一个以上的存储类”。 

 

typedef 定义函数指针: typedef int (*funcname)(int, int); 其中funcname就是 指向返回值为int,参数列表为int, int 的函数指针类型。调用函数的时候(funcname是函数指针),应用如下语句:(*funcname)(int, int)

  • const修饰符

const char * 修饰的是一个不可修改的字符串

char * const str 说的是一个不可改动的字符串指针

  • 在<new>中有个函数叫做set_new_handler(void (*newhandler)()),用于在new不能分配内存的时候调用
  • 对static类型数据的初始化:
    • 一般的static数据(例如static int),必须在类外面进行初始化;
    • 只有static const才能在类的内部进行初始化(static const int a = 0)
    • 外面进行初始化时不写static关键字,否则会编译错误
原创粉丝点击