我在类中有两个重载方法,当我调用类的方法时,我传递了一个参数,它可以通过上传或向下转换匹配两个重载方法参数之一。那么究竟哪一个会被称为?c或C++类型转换
我的意思是:function1(TypeA x)
,function1(TypeB x)
,当我打电话function1(m)
,m
可以上溯造型到TypeA
和m
也可以向下转换到TypeB
,所以这function1
会叫什么名字?
我在类中有两个重载方法,当我调用类的方法时,我传递了一个参数,它可以通过上传或向下转换匹配两个重载方法参数之一。那么究竟哪一个会被称为?c或C++类型转换
我的意思是:function1(TypeA x)
,function1(TypeB x)
,当我打电话function1(m)
,m
可以上溯造型到TypeA
和m
也可以向下转换到TypeB
,所以这function1
会叫什么名字?
看来这个问题改变了,所以我推荐的版本4确实询问了向上/向下转换,而老版本更多地是关于类型转换。
如果你假设:
class A{};
class B: public A{};
class C: public B{};
void function(const A&);
void function(const C&);
和你有一个
C c;
const A& a = c;
const B& b = c;
因此,在所有情况下,它引用了同一个对象,你打电话,得到以下
function(a); // --> function(const A&);
function(b); // --> function(const A&);
function(c); // --> function(const C&);
为什么?因为编译器无法知道(实际上在这个简单的版本中它可以 - 但通常情况并非如此)编译时基类引用对象的运行时类型。所以它只能选择安全的替代品。
向上转换总是可能的,因为它是安全的,因为给定的对象总是具有其基类的所有特征。应该避免向下转换,只能通过动态转换来完成。
在第一个示例中,将浮点精度添加到1(我相信它被称为“整数提升”)。
在第二个示例中,小数部分被截断以隐式转换为目标类型。这是在此(n3242 4.9-1)什么C++标准规定草案:
浮点类型的prvalue可以转换为一个 整数类型的prvalue。转换截断;即丢弃小数部分 。如果截断的值不能在目标类型中表示为 [注意:如果目标类型为bool,请参阅4.12。 - 注意]
此无关超载,但'隐typecasting' ... –
什么书说,到底是什么? –
你说的是类型转换? –