gpt4 book ai didi

c++ - 常量函数参数作为静态数组大小?

转载 作者:行者123 更新时间:2023-11-30 17:43:43 26 4
gpt4 key购买 nike

我不完全确定为什么这不起作用

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谢谢!

最佳答案

不要混淆 const 限定符和常量。

constqualified只是表示你没有修改变量的权限。

在 C++ 中,如果 const 限定变量也是编译时常量,则允许您使用的构造。这里它是函数的参数,因此编译器无法知道它在编译时要替换的值。

在 C 语言中,情况有所不同。在现代 C 语言(即 1999 年以来的 C 语言)中,允许使用仅在执行期间才知道的值的可变长度数组。不幸的是,仍然有不符合 C99 的 C 编译器。 AFAIR 微软编译器就是其中之一。

关于c++ - 常量函数参数作为静态数组大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20179829/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com