gpt4 book ai didi

c++ - 隐式转换 - 使用哪种转换

转载 作者:可可西里 更新时间:2023-11-01 18:36:46 27 4
gpt4 key购买 nike

假设我有一个基类和子类以及一些多重继承:

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*总是隐式转换为 B*与相同constvolitile资格。

关于c++ - 隐式转换 - 使用哪种转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33097257/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com