新运算符前的括号 - 含义?

Parenthesis before the new operator - meaning?

对于 child class 我有以下代码:

class child1 : public parent {
public:
    static parent* function1(void) {
        return (child2*) new child1;
    }
    //...
};

Child2 是继承自 parent 的另一个 class。

在新运算符之前使用 parenthesis 有什么意义,即 (child2*)
解释函数作用的最佳方式是什么?

return (child2*)new child1;

那是 C 风格的转换。它将指针从 child1 * 转换为 child2 *

如果您打算将其从一种指针转换为另一种指针,则应改用 dynamic_cast 关键字。

return dynamic_cast< child2 * >( new child1 );

C++ 提供了多种类型转换,可以清楚地表明您想要哪种类型的转换。它提供 dynamic_cast 用于多态转换(即 - 确实有一个 vtable),static_cast 用于转换非多态对象(即 - 没有 vtable),reinterpret_cast 告诉编译器将对象中的字节视为不同类型的对象,并 const_cast 抛弃常量性或易失性(或转换为常量或易失性对象)。

许多 C++ 程序员永远不会使用 C 风格的转换,因为它的语法无法提供您想要什么的线索。

你也应该知道child1和child2有没有亲缘关系。一个应该是另一个的派生 class。如果不是,dynamic_cast 将 return 一个 nullptr。

此处的括号仅对类型 Parent 进行静态转换。

但是这里不会编译,因为您不能将 child1 的对象转换为 child2 的对象。 您可以使用 dynamic_cast 来转换不同类型的对象,但是由于 child2 是从 Parent 而不是从 child1 派生的,因此此转换将重新调整 nullptr。

它将填充错误为 错误 1 ​​error C2440: 'return' : 无法从 'child2 *' 转换为 'Parent

您应该转换为 Parent 类型。