gpt4 book ai didi

c++ - 通过 `this' 访问另一个对象的定义?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:44:11 24 4
gpt4 key购买 nike

假设我们有一个这样的对象:

struct B {
void access_a() {
A* a = reinterpret_cast<A*>(reinterpret_cast<char*>(this)
- offsetof(A, b));
// is accessing a here well defined, assuming this object
// is one that is inside struct A?
}
};
struct A {
/* one or more standard layout types before b */
B b;
} a;

a.b.access_a();

从理论上讲,我们确实有一个指向 A 实例的指针,至少在某些情况下,这种(丑陋的)代码似乎可以达到预期的效果。它定义明确吗?编译器是否可以假设访问一个对象的一个​​成员不会改变其他成员(如果访问的对象本身不包含指向父对象的指针),或者所有子对象都属于某种共享可变组吗?

最佳答案

一个可能的问题在于 offsetof 宏的使用,它只能与 POD 一起使用类型。

(维基:)

A Plain Old Data Structure in C++ is an aggregate class that contains only PODS as members, has no user-defined destructor, no user-defined copy assignment operator, and no nonstatic members of pointer-to-member type.

因此,只要您的 struct A 被定义为符合上述规则,它就可以保证工作(但确实如前所述,这是不好的做法和丑陋的代码)。但如果不是,你有undefined behaviour .

关于c++ - 通过 `this' 访问另一个对象的定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42611501/

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