【发布时间】:2016-09-23 21:28:27
【问题描述】:
根据Eigen documentation,对应于行数和列数的第二个和第三个模板参数预计为int。
我想知道为什么这些论点不是size_t?拥有int 的唯一原因是,特征何时允许具有负数的行数或列数?
这可能有意义的唯一原因是Eigen::Dynamic。任何人都可以确认这是允许行/列为负值的原因吗?
【问题讨论】:
-
也许,也许不是——也许你应该问问图书馆的作者。我会说这些是
int,因为Eigen::Dynamic是一个int,它是一个负值,在库中具有特殊含义。但是话又说回来,这并不能真正解释int的选择,他们本可以轻松地将其设为ssize_t,这是size_t的签名版本。 -
对于大型矩阵,最好使用动态而不是巨大的固定大小。不建议对位域或 bignum 以外的任何内容使用无符号类型。
-
@FilipeGonçalves
ssize_t不是 c++ 的一部分,而是 POSIX、IIRC,范围是 [-1...2*10^15] 或其他东西。由于 Eigen 是跨平台的,它没有这个选项。 -
@Marc Glisse 这不是谁推荐的?对 C++ 标准库容器的随机访问由 size_t 索引进行,并且它们的大小作为 size_t 返回。这基本上使得将 Eigen 与 C++ 代码(除了玩具示例)交互的程序非常容易发出警告或充满强制转换。