gpt4 book ai didi

c++ - offsetof 函数,为什么可以只传递成员名称

转载 作者:行者123 更新时间:2023-12-01 14:37:19 31 4
gpt4 key购买 nike

当我这样定义结构时:

struct abc{
int member1;
int arr_member1;
std::vector<int> mVector;
}

并且想要创建一个 arr_member 变量,我必须这样做:

abc x;
x.member1=3;
x.arr_member1= ...

//some more code

但我不能这样做:

arr_member1 a = //some code  

其中 a 应该是一个变量,它是一个包含 5 个元素的 int 数组。

但是,我该如何为 offsetof() 函数执行此操作:

offsetof(abc, arr_member1)  

我可以理解 abc 指的是一个类型,它是一个结构,但是从技术上讲,arr_member 是什么?这叫什么?指针、类型、成员类型?这个宏扩展到什么以及编译器如何编译它?

我的意思是,arr_member 不是字符串或关键字,它不是语言定义的任何数据类型,也不是类,所以编译器如何确定它不是随机的东西?

如果可能,请说明编译器如何实现特定的宏?

最佳答案

我不明白你的大部分问题,但标题:

offsetof function, why is it possible to pass just the member name

offsetof(abc, arr_member1)  

来自 cppreference :

offsetof cannot be implemented in standard C++ and requires compiler support

它不能在标准 C++ 中实现的原因是因为 arr_member1 类之外没有实体。它只是成员的名字。编译器知道类成员的名称,但是 arr_memer1 是(在类之外)您无能为力的。 C++ 有指向成员的指针,但是 offsetof 没有将指向成员的指针作为参数。这是一个讨厌的宏,它不基于 C++ 的特性,而是依赖于能够访问其自己的实现的编译器。

关于c++ - offsetof 函数,为什么可以只传递成员名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62623903/

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