在C中,当从一个类型转换为共享相同基础值的另一个类型时,最好使用显式转换吗?
下面是一个例子:
typedef int int1;
typedef int int2;
int main()
{
int1 i = 0;
int2 j;
j = i; // no explicit cast
// j = (int2) i; // explicit cast
return 0;
}
既然int1和int2都是基础类型int,那么将一种类型显式地转换为另一种类型有什么好处吗?
1条答案
按热度按时间slmsl1lt1#
就代码生成而言,强制转换是不必要的,也没有任何效果。
但是如果你使用
typedef
来定义抽象类型,它们碰巧是相同的底层类型这一事实应该是一个用户不应该知道的实现细节;它可能会随着时间的推移而改变。所以理想情况下,你应该使用强制转换来将它们视为抽象级别上的独立类型。由于C没有真实的的用户定义类型和运算符重载,用户需要知道它是否是算术类型,这样他们就知道他们是否可以使用算术运算,以及在类型之间进行转换是否有意义。
尽管如此,程序员们大多不会为此费心。由于C在
typedef
级别不强制类型兼容性,因此将其用于ADT几乎没有好处。typedef
主要用于两个原因:struct XXX
和复杂类型(特别是函数指针)的别名size_t
和pid_t
)。