gpt4 book ai didi

c++ - C/C++ 中的 typedef 是否真的通过组合复合类型(例如 int*)来创建新类型?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:52:08 24 4
gpt4 key购买 nike

最近我发现我代码中的 typedef 与我建议的完全不同。像这样的例子:

typedef int *ptype;
ptype v1 = 0, v2 = 0;

结果:v1 和 v2 都被定义为指向 int 类型的指针。但是,如果您只是将第二句中的 ptype 替换为 int *int *v1 = 0, v2 = 0;int * v1 = 0, v2 =0;, 只有 v1 是指针,v2 是普通的 inttypedef 似乎没有做简单的替换。更重要的是,当涉及到像这样的复杂修饰符时:

typedef int *ptype;
const ptype v3 = 0;

结果将是:如果我们写 const int *v3 = 0;。在上面的代码中,const 代表整个ptype 的修饰符,而不是ptype 中的int。因此,看起来 typedef 确实结合了复合类型 int* 并创建了一个新类型。

不过,权威的C/C++引用网站cplusplus说“typedef 不会创建不同的类型。它只会创建现有类型的同义词。”所以我真的很困惑,希望有人能帮助解释 typedef 的行为。谢谢!

最佳答案

“同义词”并不意味着“文本替换”。 ptype 并没有被预处理器或任何东西逐字扩展为 int *

这意味着您可以执行以下操作:

typedef int *ptype;
ptype a;
int *b;

a = b; // OK

赋值是有效的,因为ptypeint *是相同的类型;不需要类型转换或强制转换。

typedef 只是让您为现有类型指定一个新名称。但是该名称将现有类型的各个方面组合成一个不可分割的实体,例如ptype a, b; 等同于ptype a; ptype b;(const ptype 表示“const pointer-to-int”,因为 ptype 表示“pointer-to-int”)。

换句话说,由 typedef 创建的新 names 在声明方面表现得像内置关键字,但实际的 types 由这些名称表示的是相同的。

关于c++ - C/C++ 中的 typedef 是否真的通过组合复合类型(例如 int*)来创建新类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14334317/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com