Qubc
@Qubc
Ненавижу полисемию.

Правильно ли я понимаю правила arithmetic conversions?

Просто на всякий случай:
template <typename T>
void f (T t){}

int main(){
    unsigned int ui = 0;
    signed int si = 0;
    f(si + ui);//  call void f<unsigned int>(unsigned int)
    return 0;
}


unsigned int получается потому что:
https://en.cppreference.com/w/cpp/language/usual_a...

Otherwise, one type between T1 and T2 is an signed integer type S, the other type is an unsigned integer type U. Apply the follwing rules:
If the integer conversion rank of U is greater than or equal to the integer conversion rank of S, C is U.


The rank of any unsigned integer type equals the rank of the corresponding signed integer type.

Верно?
  • Вопрос задан
  • 84 просмотра
Решения вопроса 2
@dima20155
you don't choose c++. It chooses you
Да, тип будет именно таким.
Чтобы самостоятельно увидеть вывод типа, который вывел компилятор Scott Meyers предлагает намеренно создать ошибку конвертации типа и посмотреть что же компилятор написал.
https://godbolt.org/z/6bobqTG58
Ответ написан
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Верно. Можно вставить исходник на сайте C++ insights и посмотреть, какие типы там где используются.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы