C++ 这不是在贬低吗?

C++ 这不是在贬低吗?,c++,conventions,downcast,C++,Conventions,Downcast,如果我这样做 我不是“沮丧”吗 或 这个术语只用于类和对象吗 我感到困惑,因为在这种情况下,我们从一个更大的double向下投射到一个更小的int,但在类的情况下,我们从一个更小的基类向下投射到一个更大的派生类 从某种意义上说,这两个惯例不是相反吗?不,你不是在贬低。你只是在施法,在小数点后切下任何东西 向下浇铸不适用于这里。原语 int 和双不是C++中的对象,它们在类层次结构中的两个对象之间没有联系。它们是独立的原始实体 向下投射是指将一个对象投射到另一个派生对象的行为。它指的是从类层次结

如果我这样做

我不是“沮丧”吗

这个术语只用于类和对象吗


我感到困惑,因为在这种情况下,我们从一个更大的
double
向下投射到一个更小的
int
,但在类的情况下,我们从一个更小的
基类向下投射到一个更大的
派生类


从某种意义上说,这两个惯例不是相反吗?

不,你不是在贬低。你只是在施法,在小数点后切下任何东西

向下浇铸不适用于这里。原语<代码> int 和不是C++中的对象,它们在类层次结构中的两个对象之间没有联系。它们是独立的原始实体

向下投射是指将一个对象投射到另一个派生对象的行为。它指的是从类层次结构的根向下移动的行为。它与所讨论类型的大小无关

向下投射是投射一个物体的行为 基类对其中一个基类的引用 它的派生类


不,您不需要向下转换,因为double和int不是类。

int
double
都是原语而不是类,因此类的概念不适用于它们


是的,它是从“较大”类型到“较小”类型的转换(就数字大小而言),但它只是一个“投射”,而不是一个“向下投射”

这两者与其说是对立的,不如说是根本不相关。在本例中,我们采用一种类型的值,而cast采用这种类型,并生成一种类型的相似值,这种类型的值大致相似,但完全不相关


在使用类似于
dynamic\u cast
的东西遍历继承树的情况下,我们使用一个指向对象的指针(或引用),并且之前决定将其视为指向其他类型对象的指针,我们基本上(尝试)再次将其视为(更接近)原始类型的对象。然而,特别是,我们根本没有创建新的或不同的值——我们只是创建了相同值的不同视图(即,相同的实际对象)。

您不是在铸造,而是在转换。完全不同。

这不是地板。楼层转换为更小的整数。对于负数,它将被-2.5->-3.0删除,以删除对楼层的引用。无论如何,最好不要过于复杂;)@约翰:是演员阵容。当然,这也是一种转变。5.4.@John这是一个演员和一个皈依者。正如史蒂夫指出的那样。它仍然是类型转换,即使它导致所包含的值的转换也会做同样的事情,所以与演员没有真正的联系。@大卫·桑利:我只得到一个警告!我一直在期待一个错误(知道C++比C++更强类型)…不,它是允许的(参见标准的第4.9节),但是如果值超出范围,结果是未定义的。在这种情况下,由于
int
必须能够表示值34,因此它就是这样的(并且必须符合标准)。警告完全由编译器编写者决定,尽管这种截断警告很常见。虽然C++试图比C更强类型化,但它并不总是成功的。禁止“浮点积分转换”会导致太多现有的C代码不兼容。而且因为他不是在转换引用,而是在转换数值。-1。他正在通过演员阵容进行转化。问题是它是不是“沮丧”(我不认为C++定义了这个词)。
double d = 34.56;
int i = (int)d;