[C++] typedef和const

如果某个类型别名指代的是符合类型,那么把它用到声明语句中可能会让人误解。比如如下的类型pstring,实际上是char*的别名:

	typedef char *pstring;
	const pstring cstr = 0;			// cstr是一个指向char的常量指针
	const pstring *ps;				// ps是一个指针,它的对象是指向char的常量指针

上述两条声明语句的基本数据类型都是const pstring,const是对给定类型的修饰。pstring实际上是指向char的指针,因此const pstring就是指向char的常量指针,而非指向常量字符的指针。

这条声明并不等于:

const char *cstr = 0;

声明中用到pstring时,其基本数据类型就是指针。如果用char*重写声明语句,基本数据类型就变成了char,*成了声明符的一部分。这样改写的结果是,const char成了基本数据类型。cstr就成了指向char常量的指针而不是指向char的常量指针。

时间: 2024-10-25 07:38:58

[C++] typedef和const的相关文章

typedef 和 const

1. typedef 允许你为各种数据类型定义新名字 #include <stdio.h>typedef char *ptr_to_char; //这让我看起来,好奇怪,不好读void main(){ char a = 'c'; //char *b = &a; ptr_to_char b; b = &a; printf("%c\n", *b);} 2. 常量的值无法修改 int const a; const int a; 两者都可以,但是一般采取第一种,可读

C++ typedef与const

1.typedef 在C/C++语言中,typedef常用来定义一个标识符及关键字的别名,它是语言编译过程的一部分,但它并不实际分配内存空间:  typedef     int        INT; struct tagNode { char *pItem; struct tagNode* pNext; }; typedef struct tagNode* pNode; 2.const const常量存在于程序的数据段,是一个常数值.

【C++】typedef与const的纠纷

const和 define在常量定义上的问题 在C++中,我们都鼓励使用const定义常量,而不是宏define.原因有很多. 一.const比define更优雅,更符合符号常量的本意. 二.define用在复杂的代码中,不理解define的实质的人就会出问题.define是代码字面上的替换,预处理阶段还原替换的内容.而typedef是包装已经存在的类型(或者复合类型),定义新的原子类型. #include<iostream> #define DAYS 365 const int MONEY

[Syntax] typedef & const

略: typedef 和 #define 的比较 #define 是编译预处理时执行,会进行简单替换 typedef 是在编译时期处理,晚于#define 情形1 const char *p1; char const *p2; p1 = p2 = "指针可变,指向内容不可变"; char * const p3 = "指针不可变,指向内容可变"; /** * Error Code Below * p1[0] = 'x'; * p3 = "xxx";

typedef 自定义 const define

typedef list<CNewParRange> ParList; const CString C_Pos_Start_Completion[] = { _T("M2208"), _T("M2240"), _T("M2272"), _T("M2304"), _T("M2336"), _T("M2368"), _T("M2400"), _T("

const和typedef的常见用法详解

一.说说const 一般而言,const主要是用来防止定义的对象再次被修改,定义对象变量时要初始化变量. 常见用法如下: 1.用于定义常量变量,这样这个变量在后面就不可以再被修改 const int Val = 10; //Val = 20; //错误,不可被修改 2. 保护传参时参数不被修改,如果使用引用传递参数或按地址传递参数给一个函数,在这个函数里这个参数的值若被修改, 则函数外部传进来的变量的值也发生改变,若想保护传进来的变量不被修改,可以使用const保护 void  fun1(con

[转]不能将参数1从“const char []”转换为“LPCTSTR

今天在使用vs2008+MFC时候,使用editControl的replacesel(“”)发生报错.如下::不能将参数1从“const char []”转换为“LPCTSTR” 其解决方案就是, 在项目属性里面找到项目默认值下面的字符集, 将其换为:使用多字节字符集就ok了.原因: typedef   LPCTSTR    LPTSTR ; #ifndef   _UNICODE    typedef   TCHAR   char;    #else    typedef   TCHAR   w

基于typedef的用法详解【转】

也许新手用这个关键字不多,但它却是一个很有用的关键字,可以使代码模块化程度更好(即与其它代码的关联较少),在C++中还是实现Traits技术的基础,也是模板编程的基本语法之一. 若说变量定义是为变量命名,而typedef(或称为类型定义)就是为类型命名.既然都是命名,那就会有很多类似的地方.而变量定义我想大家都会使用,因此类型定义也必然会使用. 类型定义的语法可以归结为一句话:只要在变量定义前面加上typedef,就成了类型定义.这儿的原本应该是变量的东西,就成为了类型.如,下面的变量定义:in

C 中typedef 函数指针的使用

类型定义的语法可以归结为一句话:只要在变量定义前面加上typedef,就成了类型定义.这儿的原本应该是变量的东西,就成为了类型. int integer;     //整型变量int *pointer;   //整型指针变量int array [5]; //整型数组变量int *p_array [5]; //整型指针的数组的变量int (*array_pointer) [5];//整型数组的指针的变量int function (int param);//函数定义,也可将函数名看作函数的变量int