我不完全确定为什么这不起作用
void foo(const int a=10){
const int b = 10;
int c[a];
int d[b];
}
我以为我对编译器说a是常量 - 我甚至告诉它默认值是10:)。
他为什么大喊大叫:
1>sum_floats_txt.cpp(105): error C2057: expected constant expression
1>sum_floats_txt.cpp(105): error C2466: cannot allocate an array of constant size 0
1>sum_floats_txt.cpp(105): error C2133: 'c' : unknown size
我知道它告诉我的是什么,但我不知道该怎么做我想做的事情: - 具有静态数组的函数,其大小可依赖于外部常量 该函数正在计算某些内容并返回执行时所花费的时间(在RTOS中执行)。
所以我想用main中的不同参数调用这个函数。要找出它执行最短的参数。
静态数组的工作方式是否存在问题?它在编译时必须具有恒定的大小。因此,对于不同的静态数组,我必须定义更多。
可能的解决方案是创建更多函数或更多预定义大小不同的静态数组。并且一个接一个地称呼它们,但是有数千种不同的尺寸。
我不想进行非自动化迭代以获得最佳参数!在执行帮助之前,main的参数可以传递给函数吗?
VS2010 + RTX64 2013(应该不是问题) WIN7 谢谢!
答案 0 :(得分:0)
不要混淆const
限定和常数。
const
有资格说你没有权利修改变量。
在C ++中,如果const
限定变量也是编译时常量,则允许使用您正在使用的构造。这是函数的一个参数,因此编译器无法知道它在编译时会替换的值。
在C中,情况有所不同。在现代C中,即自1999年以来的C,允许具有仅在执行期间已知的值的可变长度数组。不幸的是,仍有C编译器不符合C99。 AFAIR micorsoft编译器就是其中之一。
答案 1 :(得分:0)
const int a
参数是“只读”参数。它不一定是编译器在编译时知道的值。您可以使用模板参数。
template <int N = 42>
void foo() {
int myArray[N];
}
然而, C确实允许你在那里写的东西,C ++没有,但在C ++ 14中会有“std::dynarray
”。