c++11使用运算符时无符号字符变为int=
使用运算符=,c++11无符号字符变为int,示例代码如下:c++11使用运算符时无符号字符变为int=,c++,c++11,int,clang,C++,C++11,Int,Clang,使用运算符=,c++11无符号字符变为int,示例代码如下: #include <iostream> int main(int argc, char* argv[]) { class uchar { public: uchar(unsigned char c) : c_(c) { } private: unsigned char c_; }; const unsigned ch
#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
有人能解释一下为什么会出现上述错误吗
首先,您不能直接比较uchar和unsigned char,因为它们是两种不同的类型,并且不存在隐式转换。您可以重载运算符==但可以提供转换运算符,在适当的情况下将uchar表示为无符号字符:
operator unsigned char()
{
return c_;
}
这样就行了
为什么clang将c2报告为int
至于为什么Clang认为unsigned char是一个int,它在以后的版本中看起来像一个bug。uchar是您的类。您需要重载运算符==@NeilButterworth使用clang 6.0或更低版本:问题是什么?为什么编译器将uchar标识为int,或者为什么您不能直接将无符号字符与uchar进行比较?@TerryWu有,但您不能比较两个uchar,因为您没有定义比较运算符。@TerryWu为什么会有隐式转换,uchar可以包含任何内容?