c ++ 11 unsigned char在使用operator =时变为int,示例代码如下:
#include <iostream>
int main(int argc, char* argv[]) {
class uchar {
public:
uchar(unsigned char c)
: c_(c) {
}
private:
unsigned char c_;
};
const unsigned char c2 = 5;
uchar c1(5);
// output: 1 1
std::cout << sizeof(c1) << " " << sizeof(c2) << std::endl;
// compile error: invalid operands to binary expression ('uchar' and 'int')
std::cout << (c1 == c2) << std::endl;
}
有人可以解释为什么会出现上述错误吗?为什么clang报告c2
为int?
使用clang ++ v6.0 -std = c ++ 11
答案 0 :(得分:3)
有人可以解释为什么会出现上述错误吗?
首先,您无法直接将uchar
与unsigned char
进行比较,因为它们是两种不同的类型,并且不存在隐式转换。您可以重载operator==
,但您可以提供转换运算符,在适当的时候将uchar
表示为unsigned char
:
operator unsigned char()
{
return c_;
}
这样做what you expect。
为什么clang将c2报告为int?
至于为什么Clang认为unsigned char
是int
,它在以后的版本中看起来像doesn't do this的错误。