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

标签 c++ static new-operator multiple-inheritance

对于子类,我有以下代码:

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

Child2 是另一个继承自父类的类。

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

最佳答案

return (child2*)new child1;

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

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

return dynamic_cast< child2 * >( new child1 );

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

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

您还应该知道 child1 和 child2 是否相关。一个应该是另一个的派生类。否则,dynamic_cast 将返回一个 nullptr。

关于c++ - 新运算符前的括号 - 含义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45559044/

相关文章:

c++ - 指向同一对象的不同基类型的指针和唯一指针

flutter - Flutter/Dart:窗口小部件中的文本根据哪个屏幕调用而变化?

c++ - 调用 placement new 时,将指针强制转换为 "void*"有什么影响吗?

C++ - 为什么在没有明显的构造函数匹配时这段代码可以编译?

c++ - 变量的常量及其生命周期

c++结构内部的访问列表

c++ - 请让我理解将派生类对象分配给基类指针- C++

c# - 使用 new 的静态变量初始化会产生代码风险

html - 将网站图标添加到静态 HTML 页面

c++ - 在 C++ 中通过 "new"重新分配内存