是否有哪个编译器支持 C++ 标准的哪个部分的列表?

Posted

技术标签:

【中文标题】是否有哪个编译器支持 C++ 标准的哪个部分的列表?【英文标题】:Is there a list of which compiler supports which part of the C++ standard? 【发布时间】:2011-06-09 05:39:36 【问题描述】:

我现在只是对 c++ 的标准感到困惑,

我知道现在有三个版本:c++98、c++03和c++0x;

据说VC6是在C++标准化之前写的,所以我不介意它不支持标准,但是我发现vs2010甚至不能支持C++03,代码如下:

class A

    class B  ;
    friend class X;
;

class X

    A::B mx;
    class Y : A::B
    
        A::B my;// This should be wrong in C++98 and C++03
                // But it works in VS2010
    ;
;

编译失败后,我想可能vs2010支持c++0x,所以我把代码改成:

class A

    class B  ;
    friend class X;
;

class X : A::B // This should be right in c++0x, but it is an error in vs2010

    A::B mx;
    class Y : A::B
    
        A::B my;
    ;
;

所以这让我很困惑,我在这里问:vs2010支持哪个版本的c++标准,如果不完全支持该标准,是否有一个列表告诉我哪个编译器支持哪个标准?

【问题讨论】:

"这在 c++0x 中应该是正确的,但在 vs2010 中是错误的" 不,不是。如果您添加int main() ,它将使用 Visual C++ 2010 SP1 编译和链接而不会出错。 Clang 和 g++ 也接受它。 Clang 也接受第一个代码 sn-p。 确实符合,但是错误列表中有错误:IntelliSence: class "A::B" can not be access IntelliSense 错误检查器不会捕获所有错误并报告一些误报(如果您在 IntelliSense 错误检查中发现误报,请随时将它们作为问题提交至Microsoft Connect)。从一致性的角度来看,真正重要的是编译器是否编译代码,它会编译。 IDE 和编译器使用完全不同的前端。 如果删除class X中的代码,编译器会报错,将change class X改为:class X : A::B 【参考方案1】:

您似乎对 MS VC++ 版本特别感兴趣...请参阅 http://msdn.microsoft.com/en-us/library/x84h5b78.aspx - 更改“其他版本”下拉组合框中的版本号以查看各种版本。

【讨论】:

【参考方案2】:

C++98 不再作为标准存在。它被 C++03 取代。其次,由于 C++11 出来的时间安排,VS2010 支持一种介于 C++03 和 C++11 之间的折中方式。

不仅如此,每个实现都有缺陷。你认为它不支持C++03是因为它没有export吗?

【讨论】:

“C++98 不再作为标准存在”——该标准几乎仍然存在。你的意思是它不再被今天的编译器实现了吗?

以上是关于是否有哪个编译器支持 C++ 标准的哪个部分的列表?的主要内容,如果未能解决你的问题,请参考以下文章

zookeeper支持c++吗

访问富文本:支持 HTML 的哪个子集?

如何判断笔记本是否支持NVMe的方法

访问控制列表有哪几种类型,分别在哪个位置?

C++头文件目录在那个文件夹?

C++编译器