Fop*_*opo 5 c c++ grammar types typedef
最近我typedef在我的代码中找到的工作与我提出的完全不同.像这样的例子:
typedef int *ptype;
ptype v1 = 0, v2 = 0;
Run Code Online (Sandbox Code Playgroud)
结果:v1和v2都被定义为指向int类型的指针.但是,如果你只需更换ptype由int *第二句中的int *v1 = 0, v2 = 0;或int* v1 = 0, v2 =0;只V1为指针和v2是正常的int.似乎typedef不做一个简单的替换.更重要的是,当涉及到复杂的修饰符时:
typedef int *ptype;
const ptype v3 = 0;
Run Code Online (Sandbox Code Playgroud)
结果将是:v3是一个const指针,const如果我们写的话,不是指向int 的指针const int *v3 = 0;.在上面的代码中const代表整体的修饰符ptype,而不是int内部ptype.因此它看起来像typedef组合复合类型int*并创建一个新类型.
但是,权威的C/C++参考网站cplusplus说"typedef不会创建不同的类型.它只创建现有类型的同义词." 所以我真的很困惑,希望有人可以帮助解释一下这种行为typedef.谢谢!
mel*_*ene 16
"同义词"并不意味着"文本替换".ptype并不是int *由预处理器或任何东西逐字扩展.
这意味着你可以做以下事情:
typedef int *ptype;
ptype a;
int *b;
a = b; // OK
Run Code Online (Sandbox Code Playgroud)
赋值是有效的,因为ptype它int *是相同的类型; 不需要类型转换或强制转换.
typedef只是让您为现有类型指定一个新名称.但是该名称将现有类型的每个方面组合成不可分割的实体,例如ptype a, b;等同于ptype a; ptype b;(并且const ptype意味着"const pointer-to-int",因为ptype意味着"指向int").
换句话说,就声明事物而言,由内置关键字创建的新名称typedef就行了,但这些名称所代表的实际类型是相同的.