【发布时间】:2022-11-14 22:22:10
【问题描述】:
假设我从一个在类对象初始化时运行的 lambda 函数得到一个int。是否可以使用int 来定义std::array 的大小?类似于以下代码。
#include <array>
#include <vector>
#include <iostream>
class Test1 {
public:
Test1( std::vector<int> vec1 ) :
nvars([&vec1]() -> int { return vec1.size()+1; }())
{
};
const int nvars;
// ******This isn't allowed!!!!!!!!!
const std::array<int,nvars> arr;
};
int main() {
std::vector<int> vec{1,2,3,4};
Test1 test1(vec);
std::cout << "nvars: " << test1.nvars << std::endl;
return 0;
}
我是 C++ 初学者,因此欢迎任何其他建议。
【问题讨论】:
-
不。大小是数组类型的一部分。类的定义必须知道成员的类型
-
运行时常量(即在程序执行期间不能更改的值)和编译时常量(即编译器已知的值)之间存在差异。整数模板参数必须是编译时常量。
-
[&vec1]() -> int { return vec1.size()+1; }()和vec1.size()+1之间在功能上有什么区别吗?编辑:我猜它转换为int。
标签: c++ arrays initialization constants size