为字符C++指定最小值

Assign min Value to char C++

本文关键字:最小值 C++ 字符      更新时间:2023-10-16

我正试图将char的最小值分配给像这样的char数组类型的变量

char charchar_value[MAX_VARCHAR_LENGTH + 1]= CHAR_MIN;

它给了我这个错误"不兼容的类型在分配'char'到'char[513]'"

数组对象的初始化需要使用大括号初始值设定项列表,即沿线的内容

char charchar_value[MAX_VARCHAR_LENGTH + 1] = { val_0, val_1, /*...*/ val_n };

这将把第一CCD_ 1值初始化为它们各自的值并且将所有其它值初始化为零。这不是你想要的。在数组中设置值的唯一方法是在初始化之后,例如使用std::fill():

std::fill(std::begin(charchar_value), std::end(charchar_value),
          std::numeric_limits<char>::min());

由于还有另一个建议建议基本上使用C方法:

  • memset()的使用仅限于没有任何C++功能的类型(事实上,char也是如此),当将值设置为0以外的值时,它几乎仅限于char(是的,我意识到在某些情况下它仍然可以工作)。std::fill()与可CopyAssignable的任何类型以及给定给相应类型的对象的任何值一起工作
  • 尽管在这种情况下使用sizeof()是可行的,但在大小变为动态的那一刻它就不起作用了,但编译器仍然很乐意接受代码。获取指针的std::begin()n0将失败
  • 在类型不确切的情况下,例如当它是typedef或在模板中时,std::numeric_limits<T>::min()有更好的工作机会。它仍然不适用于许多类型,因为没有定义min(),但范围更大

话虽如此,我只会使用一个适当的类,直接进行初始化,即

std::vector<char> charchar_value(MAX_VARCHAR_LENGTH + 1,
                                 std::numeric_limits<char>::min());

不过,这是动态分配内存的,也就是说,它并不完全等效。然而,除非有充分的理由做出相反的假设,否则我会使用简单的方法,并且只有在必要时才进行优化。

如果您只想将第一个元素设置为CHAR_MIN,那么它将是:

char charchar_value[MAX_VARCHAR_LENGTH + 1] = { CHAR_MIN };

如果您想将整个阵列初始化为CHAR_MIN,那么它将是:

char charchar_value[MAX_VARCHAR_LENGTH + 1];
memset(charchar_value, CHAR_MIN, sizeof(charchar_value));

确定C++中以下数据类型的最小值和最大值:

g)  char
h)  int
i)  float
j)  double