做网站怎么收费多少/今日新闻最新头条10条内容
1-可以用其他类型说明符对宏名(#define)进行扩展,但对typedef所定义的类型名却不能这样做。
#definepeach int
unsignedpeach i ; // 可以
typedefint banana;
unsigned banana i ; // 错误 typedef 更限制
2- 定义指针,typdef更安全。typedef定义的类型能够保证连续声明中所有变量均同一种类型,而用#define定义的类型却无法保证。
#defineint_ptr int*
int_ptrchalk, cheese;
经过宏扩展,第二行变为:int*chalk, cheese;
这使得chalk 与cheese为不同的类型。chalk为int类型的指针,而cheese只是int类型变量。
typedefchar * char_ptr;
char_ptrBenley, Royce ; Benley,和Royce类型都是指向char的指针
原因:#define在编译时仅仅是名称替换
typedef被看成一个彻底封装的“类型”。
注意:typedef中使用指针往往带来意外的结果。例:
typedefstring *pstring;
constpstring cstr;
错误理解:c_str的类型是conststring* cstr。
错误原因是将typedef当成#define直接进行文本扩展了
正确理解:其实 const 修饰的是 pstring 而 pstring 是一个指针 , 因此,正确的等价形式应该是 string *const cstr;