c ++ 11 unsigned char становится int при использовании operator = - PullRequest
0 голосов
/ 08 июня 2018

c ++ 11 unsigned char становится int при использовании operator =, пример кода ниже:

#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 голосов
/ 08 июня 2018

Может кто-нибудь объяснить, почему вышеприведенная ошибка?

Прежде всего, вы не можете напрямую сравнить uchar с unsigned char, потому что это два разных типа и неявного преобразования не существует.Вы можете перегрузить operator==, но вместо этого вы можете предоставить оператора преобразования, который будет представлять ваш uchar как unsigned char, когда это необходимо:

operator unsigned char()
{
    return c_;
} 

Таким образом, он будет соответствовать вашим ожиданиям .

почему Clang сообщает c2 как целое число?

Что касается того, почему Clang считает, что unsigned char - это int, это выглядит как ошибка, так как не делает этого в более поздних версиях.

...