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

可被Clang编译但GCC编译失败的C++代码是否符合标准?

代码合规性分析

这段代码完全符合C++标准的定义,GCC拒绝编译属于编译器实现问题,Clang的行为是正确的。

核心规则解释

C++标准允许通过基类指针/引用,使用派生类的作用域限定符调用继承而来的成员函数:

  • 这里static_cast<B*>(d)得到指向基类B的指针,->D::foo()的写法合法:D继承自B且未重写foo,D::foo本质是继承自B的虚函数,作用域限定符D::会明确指定调用该作用域下的foo,同时抑制虚函数的动态绑定。
  • 即便D重写了foo,这种写法依然合规:此时会直接调用D::foo,而非通过虚表动态派发。

编译器行为差异

Clang正确实现了标准规则,允许该语法;GCC在此场景下的报错不符合标准要求,属于其实现中的疏漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 15:54:14