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

C++23带this参数成员函数调用:MSVC报错GCC/Clang通过,是否合规?

C++23带显式this参数的成员函数调用是否符合标准?

我编写了一段C23代码,可通过GCC和Clang编译,但被MSVC拒绝,现咨询该代码是否符合C标准。

代码如下:

struct C
{
    void f(this C);  
    
    void b()
    {
        (C::f)(); // GCC和Clang可编译,MSVC报错
    }
};

int main()
{ 
      C c;
      c.b();       
}

MSVC错误信息:

(7): error C2352: “C::f”: 调用非静态成员函数需要对象 (3): note: 参见“C::f”的声明

结论

这段代码符合C++23标准,MSVC的报错属于编译器实现未跟上标准的问题。

C++23引入的显式this参数特性,允许成员函数将this作为第一个参数声明。对于这类函数,即使通过(C::f)这种限定名的方式调用,在成员函数的上下文里,编译器应当自动将当前对象的this指针作为第一个参数传递给f。GCC和Clang的行为符合标准要求,而MSVC尚未正确处理这种调用场景。

内容的提问来源于stack exchange,提问作者user19946454

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 17:52:05