Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Неявне та явне визначення типу | Використання шаблонів
Шаблони C++

Неявне та явне визначення типу

Свайпніть щоб показати меню

Неявне визначення типу

У більшості випадків компілятор C++ може автоматично визначити тип шаблону на основі аргументів, переданих у функцію. Якщо типи параметрів містять всю необхідну інформацію, немає потреби явно вказувати тип.

main.cpp

main.cpp

12345678910111213
#include <iostream> template<typename T> void PrintValue(T value) { std::cout << value << std::endl; } // The compiler assigns the type for `T` // Based on the type of the passed argument `value` int main() { PrintValue(42); // `T` is deduced as `int` PrintValue(3.14); // `T` is deduced as `double` PrintValue("Hello"); // `T` is deduced as `const char*` }

Компилятор автоматично визначає тип параметра шаблону T на основі аргументів функції. Це робить виклики функцій коротшими та легшими для сприйняття. З цієї причини ви могли вже використовувати шаблони, навіть не усвідомлюючи цього.

main.cpp

main.cpp

header.h

header.h

123456789101112
#include <iostream> int main() { int a = 300; int b = 200; // `std::swap` is actually a template and you can prove it // Try to specify `int` type explicitly `std::swap<int>` std::swap(a, b); std::cout << a << " " << b << std::endl; }

Явне зазначення типу

Виникає питання: якщо виведення типу відбувається неявно, навіщо взагалі явно вказувати тип? Це пов'язано з тим, що існують ситуації, коли автоматичне виведення типу не працює або є недостатнім, і тоді потрібно явно вказати тип шаблону. Розгляньте приклади.

ambiguous.cpp

ambiguous.cpp

forcing_type.cpp

forcing_type.cpp

no_parameters.cpp

no_parameters.cpp

12345678910
#include <iostream> template<typename T> T GetDefaultValueSum(T a, T b) { return a + b; } int main() { // If `float` won't be specified, this code would generate an error std::cout << GetDefaultValueSum<float>(2, 2.5) << std::endl; }
question mark

Який варіант є неправильним для заміни плейсхолдера ___ у наведеному коді?

Виберіть правильну відповідь

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 2. Розділ 2

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Секція 2. Розділ 2
some-alt