"this"指针上的指针算术
Pointer arithmetic on the "this" pointer
在
C++的"this"指针上执行指针算术(如果有的话)有哪些合法和/或有趣的用途?
为了让 SE 对这个问题的长度感到满意,我将包含一些相关的代码。
class Foo
{
public:
Foo(bool terminate = false)
: _data(terminate ? -1 : 0)
{}
void Bar(void)
{
if (_data >= 0)
{
_data++;
this[1].Bar();
}
}
private:
int _data;
};
void main()
{
std::vector<Foo> vec;
vec.push_back(Foo());
vec.push_back(Foo());
vec.push_back(Foo());
vec.push_back(Foo());
vec.push_back(Foo(true));
vec[2].Bar();
}
简短的回答:不要。
当然,你可以用这个做各种各样的黑魔法,例如访问你展示的上一个或下一个数组元素,通过指针偏移量访问基类的私有成员,或者从它的内存位置获取对象的"唯一"ID,只要它永远不会移动。但所有这些很可能在某个时候适得其反,对于我能想到的一切,都有一个更安全的解决方案。
我能想到的一个合法用途是对齐检查。假设您有一个需要 16 字节对齐的 float4
类,您可以在构造函数中放置一个断言来保证(((uintptr_t)(const void *)(this)) % 16 == 0)
.
这是合法的,但正如评论一直告诉你的那样,这是糟糕的风格。
除非您是编写一致性测试的工具链开发人员,否则不应这样做。
相关文章:
- 为什么使用 "this" 指针调用派生成员函数?
- 关于C++中具有多重继承"this"指针的说明
- Doees the 'this' 指针参与虚函数的多态行为
- 指针'this+1' C++中指的是什么?
- 为什么使用指向函数的指针调用虚函数时不需要指针"this"?
- Lambda 函数捕获错误的指针"this"
- 调用类的方法时,类的指针"this"变为 null C++
- 指针'this'可以是共享指针吗?
- 如何在C++中为指针'this'赋值
- C++:指针"this"没用吗?
- 指针"this"有什么问题?
- 将指针'this'传递为 LPARAM
- 错误 C2663:指针'this'重载没有合法转换
- C++ : 了解指针"this"
- 更改对象的指针'this'以指向不同的对象
- C++编译器是为所有成员方法生成指针"this"还是仅为引用成员的方法生成指针?
- 使用指针和不使用指针"this"有区别吗?
- 将enable_shared_from_这个基于类的指针(this)存储在itelf中
- 创建指向对象的指针"this"
- 如何在类中取消初始化指针"this"?