You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在非静态成员函数外使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 10:34:53