c++ - 可以从命令行参数中读取 std::array 的维度吗?
问题描述
我有一个 C++ 代码,我决定使用它std::array
来代替,std::vector
我希望从命令行读取数组的大小。
在实践中,这可以用以下代码段来总结
#include <iostream>
#include <array>
#include <sstream>
int main(int argc, char* argv[]){
std::size_t my_size;
{
std::istringstream is{argv[1]};
is >> my_size;
}
std::cout << my_size<<std::endl;
std::array<int,my_size> a;
return 0;
}
my_size
编译器给出以下错误,这是由于必须在编译时知道的事实。
错误:'my_size' 的值在常量表达式中不可用
14 | std::array<int,my_size> a;
有没有办法让std::array
从命令行给出的大小?还是我一定要使用其他容器?作为堆上的动态数组,或者std::vector
?
解决方案
特别是类型和数组大小必须在编译时知道,因此答案是:不。
您可以实现一些从运行时值到编译时常量的映射。类似的东西
size_t size;
std::cin >> size;
if (size == 10) {
std::array<int,10> x;
// use x
} else if (size == 20) [
std::array<int,20> y;
// use y
}
然而,这是非常有限的用途,因为x
和y
是不同的类型。当大小仅在运行时已知时,使用std::vector
.
推荐阅读
- azure-logic-apps - 如何区分 PowerAutomate 中的共享邮箱和用户邮箱?
- .net - 在 Azure 应用服务上托管 WCF 不响应客户端应用服务
- kdb - 如何在单个查询中更改命名空间?
- authentication - 尝试以用户身份登录时:目标类 [Laravel\Fortify\Http\Controllers\AuthenticateSessionController] 不存在
- loops - 无法在 Kotlin 中重新分配变量的值
- javascript - 得到网格的孩子根据内容增长和缩小
- python - 结束请求 Python
- wordpress - 从 woocommerce 结帐帐单运输字段中删除默认选定状态,但仅适用于第一次来宾用户填写信息
- javascript - 是否可以在 getServerSideProps() 中获取搜索词参数?
- javascript - 页面开始添加 DOM 元素之前的 Chrome.storage.sync 用法