typedef
似乎是特定于 C++ 的(可能在某些其他语言中)。我发现它隐藏了值的真实数据类型,因此使项目新手感到困惑。也许有时缩短打字是有用的。你什么时候推荐使用 typedef
?
我还注意到我无法将 typedef 值传递给接受基础类型的函数?
类似于:
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
最佳答案
typedef
是用于从现有类型创建新类型的 C 和 C++ 语言标签。最好的地方是将它与具有结构的 C 编程语言一起使用,例如以下示例,或者使用它从现有的基本类型(短、长等)创建一个新的、更抽象的类型。
typedef struct {
int iValue;
int jValue;
} MyValues;
// declare a variable with this struct
MyValues aMyValuesStruct;
在 C 中引入 typedef 之前,为了将上述结构用作类型,您必须执行如下操作:
struct _MyValuesStruct {
int iValue;
int jValue;
};
// declare a variable with this struct
struct _MyValuesStruct aMyValuesStruct;
在 C++ 中,结构和类是创建新类型的类似构造,因此 typedef
对这些类型的变量没有用处。但是,如果您使用内置原始类型来表示其他一些更抽象的类型,则 typedef 语句可以帮助您以更抽象的方式指定类型。
使用 typedef
可以更轻松地为类型指定标签,这样当程序员阅读源代码时,他们可以理解特定变量代表什么。例如,如果你有一个适合 unsigned short
的颜色值变量,如果你使用 typedef
为颜色值创建一个新类型并一致地使用它,那么它就多了更容易识别变量包含颜色值而不是其他类型的 unsigned short
。
typedef
还允许的是,它可以更容易地找到源代码中使用特定抽象类型的所有位置,并且可以更轻松地更改基础类型。例如,如果您的颜色值类型以字节开始,那么您使用 typedef
创建一个抽象类型,例如 typedef unsigned char ColorValue;
然后您发现您需要将它从 unsigned char
更改为 unsigned short
,将有一个地方可以进行更改,如果您对该类型的使用相当严格,那将是只需要更改的地方。
关于c++ - 类型定义和转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13219400/