c – 隐式铸造 – 使用铸造

c – 隐式铸造 – 使用铸造,第1张

概述假设我有一个基类和子类以及一些多重继承: class Child : public Base, public AnotherBase{}; 和函数foo(Base * b).我还实例化了一个Child * c.然后我打电话给foo(c). 编译器在此处进行隐式转换.但它需要一个C风格的演员表,一个static_cast< Base *>或者是其他东西? static_cast和C风格的强制转换 假设我有一个基类和子类以及一些多重继承:
class Child : public Base,public AnotherBase{};

和函数foo(Base * b).我还实例化了一个Child * c.然后我打电话给foo(c).

编译器在此处进行隐式转换.但它需要一个C风格的演员表,一个static_cast< Base *>或者是其他东西?

解决方法 static_cast和C风格的强制转换是程序员明确要求进行类型转换的方式.您的示例是标准隐式转换,它是单独描述的,而不是根据显式转换.

您的示例称为派生到基本转换,并在标准中的[conv.ptr] / 2中定义:

N3337: A prvalue of type “pointer to cv D”,where D is a class type,can be converted to a prvalue of type “pointer to cv B”,where B is a base class of D. If B is an inaccessible or ambiguous base class of D,a program that necessitates this conversion is ill-formed. The result of the conversion is a pointer to the base class subobject of the derived class object. The null pointer value is converted to the null pointer value of the destination type.

换句话说,D *总是可以隐式转换为具有相同const和volitile资格的B *.

总结

以上是内存溢出为你收集整理的c – 隐式铸造 – 使用铸造全部内容,希望文章能够帮你解决c – 隐式铸造 – 使用铸造所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1240405.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存