c++ - 类型定义和转换

标签 c++ casting typedef

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/

相关文章:

c++ - 在 vector 上找到第一对元素 (int) 并获得第二对 (struct)

c++ - 以对数递增计算嵌套循环的时间复杂度

c++ - 如何在 C++ 中初始化静态 vector 数组成员

java - 查看类型变量是否表示给定类的父类(super class)

swift - 将类型 'UICollectionReusableView' 的值转换为 'MyApp.CSSectionHeader' 时出错

检查我对指针/结构和数组的理解

c++ - 避免 typedef C++ 中的声明冲突错误

c++ - C++结构中的位字段声明

c - 如何使用 C 在 64 位平台上将 void* 转换为 int?

c++ - 函数指针 typedef - 表达式必须是可修改的左值错误