gpt4 book ai didi

c++ - 什么编译机制会转换 new 运算符的结果?

转载 作者:太空狗 更新时间:2023-10-29 21:16:39 25 4
gpt4 key购买 nike

显然,new 运算符返回 void*。所以我想知道在调用 new A() 创建类 的新实例时,什么机制允许 void* 转换为 A* A.

举例说明:

// Example program
#include <iostream>
#include <string>

class A
{
public:
A() {}
};

void* createA()
{
return new A();
}

int main()
{
A* a1 = new A();
A* a2 = createA();
delete a1;
delete a2;
}

A* a1 = new A() 编译良好(显然)。

A* a2 = createA() 不报错:error: invalid conversion from 'void*' to 'A*'(显然也是...) .

实际上,第一个也做了从void*A的转换。什么机制或规则允许第一次转换并拒绝第二次转换?

这可能是一个愚蠢的问题......如果是这样,我很抱歉。

最佳答案

你这里有一个 new expression ,这又会调用 operator new (随后进行适当的转换),加上构造函数。

来自 cppreference.com :

::(optional) new (placement_params)(optional) ( type ) initializer(optional)

Attempts to create an object of type, denoted by the type-id type ...

如果您手动调用operator new,它将不起作用,例如

A* a2 = operator new(sizeof(A));

也不会编译。

关于c++ - 什么编译机制会转换 new 运算符的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34568014/

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