将"unsigned char"传递给期望char或const char*的重载函数会导致歧义

Sha*_*awk 4 c++ qt

我用a QByteArray来存储原始二进制数据.为了存储数据,我使用了QByteArray追加函数.

我喜欢使用无符号字符来表示字节,因为我认为255它更容易解释-1.但是,当我尝试将零值字节附加到a时QByteArray,如下所示:

command.append( (unsigned char) 0x00));
Run Code Online (Sandbox Code Playgroud)

编译器抱怨call of overloaded append(unsigned char) is ambiguous.据我所知,这是因为零可以解释为空指针,但为什么编译器不将unsigned char视为char,而不是想知道它是否是一个const char*?当然,我会理解编译器是否抱怨command.append(0)没有任何转换.

Mar*_*som 5

这两种重载需要一个类型转换-从一个unsigned charchar,其他的unsigned charconst char *.编译器不会试图判断哪一个更好,它只是告诉你使它明确.如果一个完全匹配,它将被使用:

command.append( (char) 0x00));
Run Code Online (Sandbox Code Playgroud)

  • @SharpHawk:非正式地说,`unsigned char`与`char`的不同之处不同于`const char*`.但是,在这种特定情况下(常数为"0"),语言认为两种差异是等价的. (3认同)