更简单、可移植的方式来迭代所有 char 值?

tem*_*def 5 c++ char

对于我正在教授的课程,我需要编写一段代码来迭代所有可能的char值。我想以一种可在不同 C++ 实现之间移植的方式来完成此操作。这意味着

  • 我不能假设charsignedunsigned
  • 我不能假设char是八位,
  • 我不能假设sizeof(int) > 1
  • 我不能假设int32_t等类型存在,
  • 我不能假设整数溢出不会捕获,
  • ETC。

我想出的最佳解决方案是以下不寻常的do ... while循环:

char ch = numeric_limits<char>::min();
process(ch);
do {
    ch++;
    process(ch);
} while (ch != numeric_limits<char>::max());
Run Code Online (Sandbox Code Playgroud)

这种方法有效,但对我来说感觉相当笨拙。从直觉上看,可能需要这样的方法是有道理的,因为增量的数量比可能的字符数多一,但也许有一种根本不同的方法可用,更类似于传统的循环for

有没有一种比这更方便的便携式方法来实现这一目标?

Bob*_*b__ 4

但也许有一种根本不同的方法可用,它更类似于传统的 for 循环。

好吧,你可以使用一个实际的for循环:

#include <limits>
#include <iostream>

void process(char ch)
{
  std::cout << static_cast<long>(ch) << ' ';
}

int main()
{
  for ( char ch = std::numeric_limits<char>::min(); ; ++ch )
  {
    process(ch);
    if ( ch == std::numeric_limits<char>::max() )
      break;
  }
  std::cout << '\n';
}
Run Code Online (Sandbox Code Playgroud)