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
相关产品推荐
相关产品推荐

