gpt4 book ai didi

c++ - 将指向数据成员的指针转换为 void *

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:14:31 24 4
gpt4 key购买 nike

我知道我可以获得指向类或结构的数据成员的指针,但以下代码的最后一行无法编译:

struct abc
{
int a;
int b;
char c;
};

int main()
{
char abc::*ptt1 = &abc::c;
void *another_ptr = (void*)ptt1;
}

为什么我不能将 ptt1 转换为 another_ptr?我们正在谈论指针,所以一个指针应该与另一个指针具有相似的维度(尽管在概念上不同)?

最佳答案

指向非静态类成员类型的指针对象指针类型不同;他们的行为非常不同。事实上,您甚至不能取消引用指向带有 * 的成员的指针。要通过指向成员的指针访问成员,请改用 .*->* 运算符。如果您可以将它转换为像这样的对象指针类型,那么,如果您使用 * 取消引用它会发生什么?

只有对象指针类型具有到 void* (§4.10) 的标准转换:

A prvalue of type "pointer to cv T," where T is an object type, can be converted to a prvalue of type "pointer to cv void".

它们是如此不同,以至于标准甚至不遗余力地确保术语“指针”不包括指向非静态成员的指针(§3.9.2):

Except for pointers to static members, text referring to "pointers" does not apply to pointers to members.

关于c++ - 将指向数据成员的指针转换为 void *,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15547305/

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