在C中定义转换为自定义数据类型的规则



对于内置的数据类型(例如intfloat等(,有内置的强制转换"规则":例如

int x, float y;
x = 3;
y = x;

将产生CCD_ 3。

有什么方法可以为typedefs定义的我自己的数据类型定义自定义的"强制转换规则"吗?

假设我有一个表示有理数的结构rational。我希望能够将int变量强制转换为rational,使得分母字段设置为1,分子等于初始int。即,如果我这样做:

typedef struct rational{int num; int denom;} rational;
int x, rational y;
x = 3;
y = x;

我想要y.num = 3y.denom = 1

是否可以定义任意函数来控制向用户定义的数据类型转换时的行为?

如果做不到这一点,是否可以为结构成员的子集设置一个"默认"值(这样,当为该类型的变量赋值时,可以选择性地跳过该成员,默认为设置的值(?

与允许重载类型转换运算符和赋值运算符的C++不同,C不允许定义自己的类型转换或隐式转换。

您需要编写一个函数来执行转换。例如:

rational int_to_rational(int x)
{
rational r = { x, 1 };
return r;
}

对于内置的数据类型(例如intfloat等(,有内置的"规则"用于强制转换

不,没有"铸造";是typecast运算符的效果,它是一个类型转换。有些转换是在没有强制转换的情况下执行的,但没有强制转换运算符就不会执行强制转换。

有没有办法为typedefs 定义的我自己的数据类型定义自定义的"强制转换规则">

Typedef只是类型的别名。它们与定义新类型无关。

如果为提供自动转换的类型创建typedef别名,则这些别名将同样适用于通过typedef描述其类型的对象和值。但就语言规范而言,只有在规范规定的地方才有自动转换。一些C实现扩展了该集合——例如,提供整数和指针之间的自动转换——但我所知道的任何C实现都不允许被编译的代码定义新的自动转换。C++在那边。

最新更新