Я довольно новичок в C ++ 17 и пытаюсь понять ключевое слово decltype
и его сочетание с auto
.
Ниже приведен фрагмент кода, который дает неожиданный результат.
#include <typeinfo>
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int16_t mid = 4;
auto low = mid - static_cast<int16_t>(2);
auto hi = mid + static_cast<int16_t>(2);
int16_t val;
cin >> val;
val = std::clamp(val,low,hi);
return 0;
}
Удивительно, но компилятор говорит мне, что есть несоответствие в clamp
и что low
и high
равны int
.Если я поменяю auto
на int16_t
, то в мире все будет хорошо, и все типы будут int16_t
, как и ожидалось.
Я задаю вопрос: почему auto
бросаетlow
и hi
до int
, когда все типы int16_t
? Это хороший вариант использования для decltype
?
Даже после прочтения cppreference.com, я неЯ не совсем понимаю, как работает decltype
, так что извините за мое невежество.