首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++定义数组有关问题.

2013-01-04 
C++定义数组问题..int fun(const int len){int arr[len]}void main(){fun(5)}fun函数会出错..传入的参数

C++定义数组问题..
int fun(const int len)
{
   int arr[len];
}

void main()
{
  fun(5);
}


fun函数会出错..
传入的参数明明是const, 为什么不能定义数组的大小???
我想实现传入多大参数就定义多大数组..
有除了new, 容器以外的其他办法么??
[解决办法]
可以这样


[解决办法]
引用:
VLA

C89不支持
C99支持
C++不支持

顶!
------解决方案--------------------



template<typename T, int size>
int GetArrLength(T(&)[size]){return size;}

[解决办法]
抱歉,题目没看清楚

template<typename T, int N>
void fun()
{
  T data[N];
}


不严谨的说,只要是template,一定是编译期间可推算出来的东西
[解决办法]
其实我只想说“谁告诉你只要是const就可以用来定义数组的大小”?
[解决办法]
引用:
int fun(const int len)
{
   int arr[len];
}

void main()
{
  fun(5);
}


fun函数会出错..
传入的参数明明是const, 为什么不能定义数组的大小???
我想实现传入多大参数就定义多大数组..
有除了new, 容器以外的其他办法么??


楼主没有明白const的含义,const定义的并不是常量,而是只读变量,你怎么能用变量去定义数组的大小呢?
[解决办法]
楼主搞混的地方大概在这里?

这样是可以的,因为编译器可以在编译期间推导出num

int const num = 5;
int b[num];





//这样是不行的,因为
void fun(int const num)
{
  int b[num];
}

int main()
{
  for(int i = 0; i != 10; ++i)
  { 
     fun(i);//i不是常数
  }

  return 0;
}


而且,其实

void fun(int num);




void fun(int const num);


的宣告是一样的,不构成overload

热点排行