是否有哪个编译器支持 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++ 标准的哪个部分的列表?的主要内容,如果未能解决你的问题,请参考以下文章