读书人

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

发布时间: 2013-01-04 10:04:14 作者: rapoo

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

读书人网 >C++

热点推荐