c++ - 如何获得数组的大小,以便我可以从函数中声明所述数组
问题描述
const int size = arraySize();
int list[size];
我收到以下错误:
表达式必须有一个常量值
我知道这可能不是最好的方法,但它是为了分配。
解决方案
您应该知道在 C++ 中没有动态分配的数组。
此外,const
变量在编译时不一定是已知的!
您可以执行以下操作之一:
- 将函数声明
arraySize
为,假设您可以在编译时constexpr
计算它的值,或者创建一个表示数组大小的常量(同样,使用 )。constexpr
- 使用动态分配的对象,例如
std::vector
(可以扩展的“数组”)或指针。但是,请注意,当您使用指针时,您必须通过 using 分配其内存new
,并通过 using 取消分配delete
,这很容易出错。因此,我建议使用std::vector
.
使用第一个,我们得到:
constexpr std::size_t get_array_size()
{
return 5;
}
int main()
{
constexpr std::size_t size = get_array_size();
int list[size];
}
编译完美。
另一件很高兴知道的事情是,std::array
它为普通的常量大小数组添加了更多功能。
推荐阅读
- javascript - 使用 JQuery get() 重新加载相应的 DIV 时不会触发 OnClick
- c# - 流利的验证自定义消息和错误代码
- css - 如何找到发出此错误的文件?
- c# - 在 DTO 中为 ASP.NET Core 中的键/值集合使用哪种类型?
- python - 如何将字典中的数字(数量)转换为字符?
- mysql - 仅在 Linux 服务器上插入 MariaDB(MYSQL) 后立即看不到新数据
- kubernetes - 即使 Job 失败也不要删除 Pod
- javascript - 错误 - TypeError:client.on 不是函数 (Discord.js)
- python - 如何在 python 中从 Google Finance 网络抓取较旧的财务业绩数据,例如 2017、2018、2019 和 2020 年
- docker - 无法在 docker 容器 errno 中启动 vscode = 不允许操作