2011-06-09 62 views
0

我現在只是對C++的標準感到困惑,是否有哪個編譯器支持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; 
    }; 
}; 

所以這讓我很困惑,而且我在這裏問:哪個版本的C++標準是vs2010支持的,如果它不完全支持這個標準的話,是否有列表告訴我哪個編譯器支持哪個標準?

+0

「這應該是正確的在c + + 0x,但它是vs2010中的錯誤」不,它不是。如果你添加一個'int main(){}'它使用Visual C++ 2010 SP1編譯和鏈接而沒有錯誤。 Clang和g ++也接受它。 Clang也接受第一個代碼片段。 – 2011-06-09 05:41:38

+0

它沒有編譯,但是在錯誤列表中有一個錯誤:IntelliSence:class「A :: B」無法訪問 – shengy 2011-06-09 06:00:26

+0

智能感知錯誤檢查器不會捕獲所有錯誤並報告一些誤報(如果您發現錯誤肯定在IntelliSense錯誤檢查中,請隨時將它們提交爲[Microsoft Connect](http://connect.microsoft.com)中的問題)。從一致性的角度來看,真正重要的是編譯器是否編譯代碼。 IDE和編譯器使用完全不同的前端。 – 2011-06-09 06:03:11

回答

1

C++ 98不再作爲標準存在。它被C++ 03所取代。其次,由於C++ 11出現的時間是定時的,VS2010支持C++ 03和C++ 11之間的一種中間程序。

更重要的是,每個實施都有疣。你認爲它不支持C++ 03,因爲它沒有export

+2

「C++ 98不再作爲標準存在」 - 標準幾乎還在那裏。你的意思是今天的編譯器不再實現它嗎? – Nick 2011-06-09 07:23:27

相關問題