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

为何无法在匿名结构体上调用成员函数?

为何无法在匿名结构体上调用成员函数?

嗨,这个问题我之前也踩过坑,咱们来拆解一下到底是怎么回事~

首先先看你写的代码:

int main() { 
    auto value = struct { int test() { return 1; } }().test(); 
}

编译时会报这个错误:

:2:18: error: expected expression 2 | auto value = struct { | ^

问题出在C++里的最令人头疼的解析(Most Vexing Parse)规则上——编译器会把struct { ... }()这种写法,错误地解析成一个函数声明(而不是你期望的“创建匿名结构体的临时对象”)。简单说,编译器觉得你在声明一个返回匿名结构体类型、没有参数的函数,而不是创建一个临时对象,后面跟着的.test()自然就找不到对应的表达式了,所以报错。

那怎么解决呢?其实很简单,给匿名结构体的实例化部分加一对括号,强制编译器把它当成表达式来解析:

int main() { 
    auto value = (struct { int test() { return 1; } })().test(); 
}

这样编译器就会明确知道,(struct { ... })是一个匿名结构体类型,后面的()是创建它的临时对象,接着就能正常调用.test()成员函数了。

刚好匹配你的使用场景:在宏里用这个写法,既能实现声明结构体并调用成员函数的需求,还能避开lambda的隐式捕获问题,完美~

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 11:48:01