在 C 中定义转换为自定义数据类型的规则
Define rules for casting to custom datatypes in C
对于内置数据类型(例如 int
、float
等),有内置的 'rules' 用于转换:例如
int x, float y;
x = 3;
y = x;
将产生 y = 3.000000
.
有什么方法可以为我自己的由 typedef 定义的数据类型定义自定义 'casting rules'?
假设我有一个结构 rational
表示一个有理数。我希望能够将 int
变量转换为 rational
,这样分母字段设置为 1
,分子等于初始值 int
。 IE。如果我这样做:
typedef struct rational{int num; int denom;} rational;
int x, rational y;
x = 3;
y = x;
我想得到 y.num = 3
和 y.denom = 1
。
是否可以定义任意函数来控制转换 to/from 用户定义数据类型时的行为?
否则,是否可以为结构成员的子集设置一个 'default' 值(以便在为该类型的变量赋值时可以选择跳过该成员,默认为设定值)?
与允许重载类型转换运算符和赋值运算符的 C++ 不同,C 不允许定义自己的转换或隐式转换。
您需要编写一个执行转换的函数。例如:
rational int_to_rational(int x)
{
rational r = { x, 1 };
return r;
}
For the built-in datatypes (e.g. int
, float
etc), there are built-in 'rules' for casting
不,没有。 “Casting”是类型转换运算符的作用,是一种类型转换。有一些转换是在没有转换的情况下执行的,但是没有转换运算符就没有执行转换。
Is there any way to define custom 'casting rules' for my own datatypes defined by typedefs
Typedef 只是类型的别名。它们与定义新类型无关。
如果您为提供自动转换的类型创建 typedef
别名,那么这些别名将同样适用于其类型通过 typedef
描述的对象和值。但就语言规范而言,只有在规范规定的地方才会有自动转换。一些 C 实现扩展了该集合——例如,提供整数和指针之间的自动转换——但是 我知道没有任何 C 实现允许正在编译的代码定义新的自动转换。 C++ 已经过去了。
对于内置数据类型(例如 int
、float
等),有内置的 'rules' 用于转换:例如
int x, float y;
x = 3;
y = x;
将产生 y = 3.000000
.
有什么方法可以为我自己的由 typedef 定义的数据类型定义自定义 'casting rules'?
假设我有一个结构 rational
表示一个有理数。我希望能够将 int
变量转换为 rational
,这样分母字段设置为 1
,分子等于初始值 int
。 IE。如果我这样做:
typedef struct rational{int num; int denom;} rational;
int x, rational y;
x = 3;
y = x;
我想得到 y.num = 3
和 y.denom = 1
。
是否可以定义任意函数来控制转换 to/from 用户定义数据类型时的行为?
否则,是否可以为结构成员的子集设置一个 'default' 值(以便在为该类型的变量赋值时可以选择跳过该成员,默认为设定值)?
与允许重载类型转换运算符和赋值运算符的 C++ 不同,C 不允许定义自己的转换或隐式转换。
您需要编写一个执行转换的函数。例如:
rational int_to_rational(int x)
{
rational r = { x, 1 };
return r;
}
For the built-in datatypes (e.g.
int
,float
etc), there are built-in 'rules' for casting
不,没有。 “Casting”是类型转换运算符的作用,是一种类型转换。有一些转换是在没有转换的情况下执行的,但是没有转换运算符就没有执行转换。
Is there any way to define custom 'casting rules' for my own datatypes defined by typedefs
Typedef 只是类型的别名。它们与定义新类型无关。
如果您为提供自动转换的类型创建 typedef
别名,那么这些别名将同样适用于其类型通过 typedef
描述的对象和值。但就语言规范而言,只有在规范规定的地方才会有自动转换。一些 C 实现扩展了该集合——例如,提供整数和指针之间的自动转换——但是 我知道没有任何 C 实现允许正在编译的代码定义新的自动转换。 C++ 已经过去了。