Typedef和cast

Jie*_*eng 5 c++ casting typedef

typedef似乎是C++特定的(可能在其他一些语言中).我发现它隐藏了该值的真实数据类型,因此令项目新手感到困惑.也许有时缩短打字很有用.你什么时候推荐使用typedef

我还注意到我不能将typedef-ed值传递给接受底层类型的函数?

就像是:

typedef string VAL;
VAL s = "x";
func(string x); // if I try to pass `s`, I get something like no instance of function template match argument list
Run Code Online (Sandbox Code Playgroud)

Ric*_*ers 4

typedef是 C 和 C++ 语言标签,用于从现有类型创建新类型。最好的地方是将其与具有如下所示结构的 C 编程语言一起使用,或者使用它从现有基本类型(短、长等)创建新的、更抽象的类型。

typedef struct {
    int iValue;
    int jValue;
} MyValues;
// declare a variable with this struct
MyValues aMyValuesStruct;
Run Code Online (Sandbox Code Playgroud)

在 typedef 被引入 C 之前,为了使用上述结构作为类型,您必须执行如下操作:

struct _MyValuesStruct {
    int iValue;
    int jValue;
};
// declare a variable with this struct
struct _MyValuesStruct aMyValuesStruct;
Run Code Online (Sandbox Code Playgroud)

在 C++ 中,结构和类是创建新类型的类似构造,因此typedef对于这些类型的变量没有那么有用。但是,如果您使用内置的基本类型来表示其他一些更抽象的类型,则 typedef 语句可以帮助您以更抽象的方式指定类型。

这种使用typedef使得为类型指定标签变得更加容易,这样当程序员阅读源代码时,他们就可以理解特定变量代表什么。例如,如果您有一个适合 an 的颜色值变量,unsigned short如果您使用 atypedef为颜色值创建新类型并一致地使用它,那么更容易识别变量包含颜色值而不是其他类型的颜色值。unsigned short

它还typedef允许更容易地找到源中使用特定抽象类型的所有位置,并且更容易更改底层类型。例如,如果您的颜色值类型以字节开始,因此您用来typedef创建一个抽象类型,typedef unsigned char ColorValue;例如,然后您发现需要将其从 an 更改unsigned char为 an unsigned short,那么将有一个地方可以进行更改,并且如果您的该类型的使用相当严格,这将是您唯一需要进行更改的地方。