【问题标题】:How do I compute the max of two size_t variables如何计算两个 size_t 变量的最大值
【发布时间】:2023-04-02 00:18:02
【问题描述】:

我的代码中有这个。

vector<unsigned int> import;
vector<unsigned int> aquired;
. . .
size_t new_size = max(import.size(),aquired.size());

我得到这个错误:

 error: more than one instance of
 overloaded function "max" matches the
 argument list:
             function "max(int, int)"
             function "max(unsigned int, unsigned int)"
             function "max(int, unsigned int)"
             function "max(unsigned int, int)"
             function "max(long long, long long)"
             function "max(unsigned long long, unsigned long long)"
             function "max(long long, unsigned long long)"
             function "max(unsigned long long, long long)"
             function "max(float, float)"
             function "max(double, double)"
             function "max(float, double)"
             function "max(double, float)"
             argument types are: (size_t, size_t)

我的理解是size_t 是一个无符号整数。那么为什么会出现这个问题以及如何解决它。

编译:

$gcc --version
gcc (Ubuntu 4.4.3-4ubuntu5) 4.4.3
$nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2010 NVIDIA Corporation
Built on Wed_Sep__8_17:12:45_PDT_2010
Cuda compilation tools, release 3.2, V0.2.1221

【问题讨论】:

  • size_t 不一定是unsigned,但我想知道候选人来自哪里?
  • 我无法在 gcc 4.4.1 上重现它。你能发布一个完整的测试程序吗?
  • 将 std:: 添加到 max 解决了我认为 max 被另一个标题或其他东西掩盖的问题。
  • @UncleBens 引用好吗?我真的怀疑这是真的,除了非常古老的不符合标准的实现。 sizeof 的返回类型小于零没有任何意义,C99 明确将size_t 定义为无符号整数类型。

标签: c++ gcc max stdvector


【解决方案1】:
#include <algorithm>

size_t val1;
size_t val2;

size_t maxValue = std::max<size_t>(val1, val2);

【讨论】:

  • 我认为不需要
【解决方案2】:

size_t 不一定是无符号整数,它取决于平台。如果您正在编译 32 位,或者如果您知道向量的大小将低于 40 亿,则可以安全地转换为无符号整数。一些 64 位平台使用 64 位 size_t,但只有 32 位的 unsigned int。
尝试使用它而不是您当前的代码:

size_t new_size = max((unsigned int)import.size(),(unsigned int)aquired.size());

【讨论】:

    【解决方案3】:

    我不认为 size_t 实际上是无符号整数。我怀疑它是它自己的类型,而不是 typedef - 至少在 g++ 中

    使用 std::max:

    #include <algorithm>
    
    int main(int argc, char **argv)
    {
      size_t a = 2, b=3;
      std::max(a,b);
      return 0;
    }
    

    【讨论】:

    • 标准要求size_t 是未指定类型的类型定义。但你说得对,不一定是unsigned int
    【解决方案4】:

    试试这个:

    std::max((unsigned int)import.size(), (unsigned int)aquired.size());
    

    【讨论】:

      猜你喜欢
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-17
      • 2017-03-23
      • 2018-11-12
      • 2018-08-11
      相关资源
      最近更新 更多