7

c++ 中new和定位new的返回值都是void *为什么可以被赋值给不同的指针?

 3 years ago
source link: https://www.zhihu.com/question/453030451/answer/1819725951
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

c++ 中new和定位new的返回值都是void *为什么可以被赋值给不同的指针?

7
544
登录一下,更多精彩内容等你发现
贡献精彩回答,参与评论互动
C++程序猿, 公众号:高级开发者

new操作符的返回类型不是void*,而是具体类型的指针。

v2-d90942d5a05b6f7f3553dea58db25cde_720w.jpg?source=1940ef5c
继续浏览内容
v2-88158afcff1e7f4b8b00a1ba81171b61_720w.png
发现更大的世界
v2-a448b133c0201b59631ccfa93cb650f3_1440w.png
Chrome

调用 operator new 只是 new 表达式的其中一步。

一些 new 表达式甚至不会调用 operator new。

继续浏览内容
v2-88158afcff1e7f4b8b00a1ba81171b61_720w.png
发现更大的世界
v2-a448b133c0201b59631ccfa93cb650f3_1440w.png
Chrome
Hello, 程序猿

因为标准就是这么规定的。void*和(unsigned) char*可以和其他任意指针类型互转。(类成员指针除外)

另外题主问题里并不涉及类型转换。placement new可以用void*指针也是因为语法规范就是这样的。

继续浏览内容
v2-88158afcff1e7f4b8b00a1ba81171b61_720w.png
发现更大的世界
v2-a448b133c0201b59631ccfa93cb650f3_1440w.png
Chrome

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK