对于内置的数据类型(例如int
、float
等(,有内置的强制转换"规则":例如
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 = 3
和y.denom = 1
。
是否可以定义任意函数来控制向用户定义的数据类型转换时的行为?
如果做不到这一点,是否可以为结构成员的子集设置一个"默认"值(这样,当为该类型的变量赋值时,可以选择性地跳过该成员,默认为设置的值(?
与允许重载类型转换运算符和赋值运算符的C++不同,C不允许定义自己的类型转换或隐式转换。
您需要编写一个函数来执行转换。例如:
rational int_to_rational(int x)
{
rational r = { x, 1 };
return r;
}
对于内置的数据类型(例如
int
、float
等(,有内置的"规则"用于强制转换
不,没有"铸造";是typecast运算符的效果,它是一个类型转换。有些转换是在没有强制转换的情况下执行的,但没有强制转换运算符就不会执行强制转换。
有没有办法为typedefs 定义的我自己的数据类型定义自定义的"强制转换规则">
Typedef只是类型的别名。它们与定义新类型无关。
如果为提供自动转换的类型创建typedef
别名,则这些别名将同样适用于通过typedef
描述其类型的对象和值。但就语言规范而言,只有在规范规定的地方才有自动转换。一些C实现扩展了该集合——例如,提供整数和指针之间的自动转换——但我所知道的任何C实现都不允许被编译的代码定义新的自动转换。C++在那边。