能否在非静态成员函数外使用C++的this关键字?
在C++类/结构体外部无法使用
this关键字获取对象指针 C++标准明确规定,this关键字仅能在非静态类或结构体的成员函数作用域内使用,不存在任何语法或手段能让你在类/结构体外部直接通过this获取对象指针。
为什么不行?
this本质是编译器隐式传递给非静态成员函数的指针参数,指向调用该函数的当前对象。它的作用域被严格限制在非静态成员函数内部,离开这个范围后,编译器根本不认识this这个标识符,直接写会触发编译错误。
替代方法
如果需要在类外部拿到某个对象的指针,直接取对象的地址就可以了。比如针对你给出的代码,可修改成这样:
#include <iostream> struct sample { void function() { std::cout << "Typeid : " << typeid(this).name() << '\n'; } }; int main() { sample s1{}; s1.function(); // 直接获取对象s1的指针,替代外部用this的需求 sample* obj_ptr = &s1; std::cout << "对象地址:" << obj_ptr << '\n'; return 0; }
要是你需要访问对象的成员,直接通过对象本身或者对象指针操作就行,完全不需要依赖this。
内容的提问来源于stack exchange,提问作者camhead
相关产品推荐
相关产品推荐

