我正在阅读Bjarne Stroustrup的“The C ++ Programming Language”来学习C ++并遇到以下段落:
static_cast
运算符将相关类型(例如一个指针类型)转换为同一类层次结构中的另一个指针类型,枚举的整数类型或浮点类型转换为积分类型。reinterpret_case
处理无关类型之间的转换,例如指针的整数或指向不相关指针类型的指针。
对我来说,不清楚是什么决定任何两种给定类型是相关的还是不相关的,所提到的例子似乎并不详尽。
Stroustrup说类型分为1.算术类型2.用户定义的类型和3.内置类型,从上面的例子中,他认为算术类型(int)与用户定义的类型有关(ENUM)。浮点类型到int是显而易见的,因为它们都是算术类型。
然而,他根据他的定义将两个指针(根据他的定义应该是内置类型)分类为不相关的。
那么我们说“两种类型是相关的(不相关的)”是什么意思呢?
答案 0 :(得分:3)
在下面的示例中,类型A和B是相关的,而类型A和C以及B和C是不相关的:
class A
{
...
};
class B : public A
{
...
};
class C
{
...
};
总的来说,我认为类型X和Y是相关的当且仅当以下条件之一成立时:
答案 1 :(得分:0)
如果两种类型通过继承方式属于同一个类层次结构,则它们是相关的。
static_cast运算符将相关类型(例如一个指针类型)转换为同一类层次结构中的另一个类型,枚举的整数类型或整数类型的浮点类型。 reinterpret_case处理不相关类型之间的转换,例如指针的整数或指向不相关指针类型的指针。
这个文本似乎有点错误引用,因为它似乎表明(整数类型和枚举类型)以及(浮点类型和整数类型)是相关的。 我认为文本应该说的是:
static_cast
运算符在指向相关类型的指针之间进行转换(upcast以及downcast而不运行时类型检查),枚举的整数类型,....
reinterpret_cast
运算符将任何指针类型转换为另一个指针类型,即使它们不相关,整数指针指向或......。
参考:static_cast
和reinterpret_cast
的措辞似乎更清晰cplusplus.com