tg-me.com/cpluspluc/1096
Last Update:
🔍 C++ Задача для профи: кто вызовется?
У тебя есть следующий код:
#include <iostream>
#include <type_traits>
template<typename T>
typename std::enable_if<std::is_integral<T>::value, void>::type
process(T value) {
std::cout << "Integral: " << value << std::endl;
}
template<typename T>
typename std::enable_if<std::is_floating_point<T>::value, void>::type
process(T value) {
std::cout << "Floating-point: " << value << std::endl;
}
int main() {
process(42); // (1)
process(3.14); // (2)
process('A'); // (3)
}
❓ Вопросы:
1. Что напечатает программа?
2. Почему вызов
process('A')
может удивить?3. Что произойдёт, если передать
true
?🧠 Подвох:
-
char
— это integral type, а не string
и не отдельный класс-
true
— это тоже int`-подобный тип: `std::is_integral<bool>::value == true
- У тебя может возникнуть разный вывод в зависимости от перегрузки
✅ Разбор:
-
process(42)
→ Integral: 42
✅-
process(3.14)
→ Floating-point: 3.14
✅-
process('A')
→ Integral: 65
(ASCII код символа!) ⚠️-
process(true)
→ Integral: 1
(да, это `bool`) ✅🎯 Что проверяет задача:
- Понимание
SFINAE
и enable_if
- Типовую систему C++ (что именно считается integral)
- Разницу между
char
, bool
, int
, float
в шаблонах- Предсказание поведения перегрузки на уровне типов
@cpluspluc
BY C++ Academy
Warning: Undefined variable $i in /var/www/tg-me/post.php on line 283
Share with your friend now:
tg-me.com/cpluspluc/1096