【问题标题】:Eigen::Matrix | Why does eigen expect an int and not size_t?特征::矩阵 |为什么 eigen 期望一个 int 而不是 size_t?
【发布时间】: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++ 代码(除了玩具示例)交互的程序非常容易发出警告或充满强制转换。

标签: c++ size eigen


【解决方案1】:

Eigen::Dynamic 根本不是原因,因为它可以等于 numeric_limits<size_t>::max() 或相同的 size_t(-1)

我相信这是因为 Eigen 的目标受众更愿意使用 int 而不是其他任何东西。 然后,如果您对此选择不满意,您可以使用 EIGEN_DEFAULT_DENSE_INDEX_TYPE 预处理器指令来设置您认为合适的任何内容并面对后果...... :) 不,说真的,我至少会在实际使用之前运行完整的 Eigen 测试集。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多