【发布时间】:2018-11-18 12:48:03
【问题描述】:
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
【问题讨论】:
-
uchar是你的班级。你需要重载operator== -
@NeilButterworth 使用 clang 6.0 或更低版本:wandbox.org/permlink/v7J38Y6ME3uPKE1Q
-
问题是什么?为什么编译器将
uchar识别为int,或者为什么不能直接将unsigned char与uchar进行比较? -
@TerryWu 有,但您无法比较两个
uchars,因为您没有定义比较运算符。 -
@TerryWu 为什么会有隐式转换,
uchar可以包含任何东西?