gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 01:44:51 28 4
gpt4 key购买 nike

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

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/

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