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

g++13(Linux)与g++14(MSYS2 Windows)成员指针语法差异问询

g++ 13与MSYS2 g++14的非静态成员函数语法差异

以下代码在Windows 10平台MSYS2环境的g14(版本:g.exe (Rev2, Built by MSYS2 project) 14.2.0)中可正常编译运行:

#include <iostream>
#include <thread>

class A
{
public:
    void f()
    {
        std::cout<<"Okay!\n";
    }
};

int main(int argc,char **argv)
{
    A a;
    std::thread t(A::f,&a);
    t.join();
    return 0;
}

但在Linux平台的g++13中编译该代码时,会触发错误:

error: invalid use of non-static member function 'void A::f()'

解决方案

将构造std::thread的代码修改为显式取成员函数的地址,即可兼容两个版本:

std::thread t(&A::f,&a);

原因说明

C标准规定,非静态成员函数的名称本身不会隐式转换为成员函数指针,必须通过&运算符显式获取指针。MSYS2的g14可能实现了非标准扩展,允许省略&直接使用成员函数名;而g++13严格遵循标准要求,因此必须显式取地址才能通过编译。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 09:05:59