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 cvD
”,whereD
is a class type,can be converted to a prvalue of type “pointer to cvB
”,whereB
is a base class ofD
. IfB
is an inaccessible or ambiguous base class ofD
,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 – 隐式铸造 – 使用铸造所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)