使用operator =时,c ++ 11 unsigned char变为int

时间:2018-06-08 12:44:37

标签: c++ c++11 int clang

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

1 个答案:

答案 0 :(得分:3)

  

有人可以解释为什么会出现上述错误吗?

首先,您无法直接将ucharunsigned char进行比较,因为它们是两种不同的类型,并且不存在隐式转换。您可以重载operator==,但您可以提供转换运算符,在适当的时候将uchar表示为unsigned char

operator unsigned char()
{
    return c_;
} 

这样做what you expect

  

为什么clang将c2报告为int?

至于为什么Clang认为unsigned charint,它在以后的版本中看起来像doesn't do this的错误。