C++11 为什么VisualStudio不支持数组大小的变量?

C++11 为什么VisualStudio不支持数组大小的变量?,c++11,palindrome,visual-studio-2015,C++11,Palindrome,Visual Studio 2015,这是CodeLeet关于寻找最长回文子串的问题陈述 在codeleet界面中,此解决方案起作用: class Solution { public: string longestPalindrome(string s) { int len = s.size(); int P[len][len]; memset(P, 0, len*len*sizeof(int)); int maxL=0, start=0, end=0; f

这是CodeLeet关于寻找最长回文子串的问题陈述

在codeleet界面中,此解决方案起作用:

class Solution {
public:
string longestPalindrome(string s) {
     int len = s.size();  
        int P[len][len];  
 memset(P, 0, len*len*sizeof(int));  
        int maxL=0, start=0, end=0;  
        for(int i =0; i< s.size(); i++){  
             for(int j =0; j<i; j++){  
                  P[j][i] = (s[j] == s[i] && (i-j<2 || P[j+1][i-1]));  
                  if(P[j][i] && maxL < (i-j+1))  
                  {  
                       maxL = i-j+1;  
                       start = j;  
                       end = i;  
                  }  
             }  
             P[i][i] =1;  
        }  
        return s.substr(start, end-start +1); 
   }
};
类解决方案{
公众:
字符串最长回文(字符串s){
int len=s.size();
int P[len][len];
memset(P,0,len*len*sizeof(int));
int maxL=0,start=0,end=0;
对于(inti=0;i对于(int j=0;j< p>),因为可变长度数组(使用非->代码COSTEXPRO变量的数组声明)是C99特征,而不是C++特性。没有C++版本提供它们,并且VisualStudio的版本没有提供特定的C99特征。

<>如果你的代码编译在其他C++编译器上,那是因为C++语言扩展,它们提供了C++标准的顶部。

VS编译器没有问题。在C++中,你可以使用<代码> new int []/Cord>创建一个运行时定义的一维数组,但是<代码> new int [][]
不可用,除非第二维度是常量表达式。 以下尝试给出一个编译器错误,即第二维度必须是常量表达式:

int len = 10;
int **P = new int[len][len]; // error: non-constant expression as array bound (on 2nd dimension)
此链接提供了一个很好的解决方法。

可能重复的
int len = 10;
int **P = new int[len][len]; // error: non-constant expression as array bound (on 2nd dimension)