gcc 4.8.1是否支持C++11的垃圾回收?

11

我之所以问这个问题,是因为网络上有矛盾的信息。一方面,在isocpp.org上它声称GCC 4.8.1已经完全实现了C++11标准。另一方面,在GCC C++11支持页面上,它声称没有“垃圾回收和基于可达性的泄漏检测的最小支持”。那么,GCC 4.8.1真的完全支持C++11特性吗?


2
垃圾回收不是可选的吗? - Mechanical snail
4
Gcc 4.8 在核心语言层面上完全符合 C++11 的标准,但这并不意味着库实现也完全符合 C++11 的标准。 - David Rodríguez - dribeas
5
GC是可选的,对GC的最小支持是必须的,但在4.8版本的gcc中缺失。 - David Rodríguez - dribeas
@DavidRodríguez-dribeas 但是,“最小化GC支持”被列为语言特性而不是库特性,至少在GCC支持页面上是如此。 - jogojapan
@jogojapan:提案有不同的部分,其中一些是核心语言(例如安全派生指针的轻微修改),另一些是要添加到标准库中的接口(论文中的库措辞部分)。一个实现了核心语言但没有实现库的编译器并没有完全实现该提案,但在核心语言层面上是完全符合规范的。 - David Rodríguez - dribeas
1个回答

13
标准中对于垃圾回收的支持是可选的(请参见Bjarne Stroustrup C++11 FAQ)。因此,GCC 4.8.1已经实现了所有强制性核心部分,具备了完整的功能。
评论表明我的答案不够清晰,我将更加具体:我只谈论了对于垃圾回收的核心支持。库部分是必需的。随GCC 4.8.1一起发行的libstdc++版本不完全符合C++11标准(例如<regex>目前无法使用),并且垃圾回收的ABI是缺失功能之一。

1
+1,参见提案 N2670一个不支持垃圾回收并将此处描述的所有库调用实现为无操作的实现是符合规范的。 - syam
5
提供垃圾回收器(GC)是可选的,但提供对GC的支持则不是。gcc c++11状态中的条目涉及对GC的支持,但该功能尚未实现。换句话说,使用Syam上面的评论:执行GC是可选的(调用可以是no-op),但接口必须存在(这是必需的)。 - David Rodríguez - dribeas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接