2014-10-27 50 views
-5
#include <iostream> 
using namespace std; 

int main() 
{ 
     cout<<"started "<<endl; 
     int n= -2; 
     int array[n]; 

     array[0]=100; 
     array[1]=200; 

     cout<<array[0]<<endl; 
     cout<<array[1]<<endl; 

     cout<<"over"<<endl; 

     return 0; 
} 

爲什麼編譯和運行?我期望編譯錯誤,因爲n的值是負值。爲什麼這個C++程序符合並在代碼塊中運行

+0

它爲什麼重要?如果你知道這是錯誤的,併產生未定義的行爲,不要這樣做。 – CoryKramer 2014-10-27 20:07:36

+1

即使'n'是肯定的,它也是無效的C++。 – PaulMcKenzie 2014-10-27 20:07:51

+1

@PaulMcKenzie,C++ 14支持VLA。 – 2014-10-27 20:11:08

回答

0

可變長度數組不是一個C++的特徵,所以該行會引起編譯錯誤在被命令嚴格遵守C++規範一個編譯器,而不管n值(除非nconst,並且可以是在編譯時確定):

int array[n]; 

可能您正在使用支持可變長度數組的編譯器作爲擴展。因此,有關有效內容的規則完全取決於特定的編譯器和編譯器選項,並且使用此擴展名編寫的任何代碼都不能移植到不支持此非標準功能的編譯器。

+0

我正在使用最新版本的CodeBlock與MinGW – 2014-10-27 20:11:54

+1

@alalamin然後您使用g ++,它支持VLA。不過,我強烈建議您避免使用它們,因爲您的代碼可能無法在任何其他編譯器上使用。如果你需要一個在編譯時不知道大小的數組,那麼你應該使用'std :: vector'。 – cdhowie 2014-10-27 20:12:30

相關問題