Рубрики

Вывод типа в C ++ (auto и decltype)

Вывод типа относится к автоматическому выводу типа данных выражения в языке программирования. До C ++ 11 каждый тип данных должен быть явно объявлен во время компиляции, ограничивая значения выражения во время выполнения, но после новой версии C ++, многие ключевые слова включены, что позволяет программисту оставлять вывод типа для самого компилятора.
Благодаря возможностям вывода типов мы можем тратить меньше времени на то, чтобы написать то, что компилятор уже знает. Поскольку все типы выводятся только на этапе компиляции, время для компиляции немного увеличивается, но это не влияет на время выполнения программы.

авто ключевое слово

Ключевое слово auto указывает, что тип объявленной переменной будет автоматически вычитаться из ее инициализатора. В случае функций, если их тип возвращаемого значения автоматический, то это будет оцениваться выражением возвращаемого типа во время выполнения.

// C ++ программа для демонстрации работы авто
// и вывод типа
#include <bits/stdc++.h>

using namespace std;

  

int main()

{

    auto x = 4;

    auto y = 3.37;

    auto ptr = &x;

    cout << typeid(x).name() << endl

         << typeid(y).name() << endl

         << typeid(ptr).name() << endl;

  

    return 0;

}

Выход :

i
d
Pi

Мы использовали typeid для получения типа переменных. typeid — это оператор, который используется там, где необходимо знать динамический тип объекта. typeid (x) .name () возвращает сокращенное имя типа данных x, например, возвращает i для целых чисел, d для двойных, Pi для указателя на целое число и т. д. Но возвращаемое реальное имя в основном зависит от компилятора. Вы можете прочитать больше о typeid здесь .

Хорошее использование auto — избегать длительных инициализаций при создании итераторов для контейнеров.

// C ++ программа для демонстрации того, что мы можем использовать auto для
// экономим время при создании итераторов
#include <bits/stdc++.h>

using namespace std;

  

int main()

{

    // Создать набор строк

    set<string> st;

    st.insert({ "geeks", "for", "geeks", "org" });

  

    // 'it' вычисляет итератор для набора строк

    // вводим автоматически

    for (auto it = st.begin(); it != st.end(); it++)

        cout << *it << " ";

  

    return 0;

}

Выход :

for geeks org 

Примечание: auto становится типом int, если ему назначена даже целочисленная ссылка. Чтобы сделать его ссылочным типом, мы используем auto &.

// function that returns a 'reference to int' type
int& fun() {   }

// m will default to int type instead of
// int& type
auto m = fun();

// n will be of int& type because of use of
// extra & with auto keyword
auto& n = fun();

ключевое слово decltype

Он проверяет объявленный тип объекта или тип выражения. Auto позволяет вам объявлять переменную с определенным типом, тогда как decltype позволяет извлекать тип из переменной, поэтому decltype является своего рода оператором, который оценивает тип переданного выражения.
Объяснение вышеупомянутого ключевого слова и их использования дано ниже

// C ++ программа для демонстрации использования decltype
#include <bits/stdc++.h>

using namespace std;

  

int fun1() { return 10; }

char fun2() { return 'g'; }

  

int main()

{

    // Тип данных x совпадает с типом возврата fun1 ()

    // и тип y совпадает с типом возврата fun2 ()

    decltype(fun1()) x;

    decltype(fun2()) y;

  

    cout << typeid(x).name() << endl;

    cout << typeid(y).name() << endl;

  

    return 0;

}

Выход:

i
c

Ниже приведен еще один пример, демонстрирующий использование decltype.

// Другая программа на C ++ для демонстрации использования decltype
#include <bits/stdc++.h>

using namespace std;

int main()

{

    int x = 5;

  

    // j будет иметь тип int: тип данных x

    decltype(x) j = x + 5;

  

    cout << typeid(j).name();

  

    return 0;

}

Выход:

i

Программа, которая демонстрирует использование как auto, так и decltype.
Ниже приведена шаблонная функция C ++ min_type (), которая возвращает минимум два числа. Два числа могут быть любого целого типа. Тип возврата определяется с использованием типа минимум двух.

// C ++ программа для демонстрации использования decltype в функциях
#include <bits/stdc++.h>

using namespace std;

  
// универсальная функция, которая находит минимум два значения
// возвращаемый тип - это тип переменной, который минимален

template <class A, class B>

auto findMin(A a, B b) -> decltype(a < b ? a : b)

{

    return (a < b) ? a : b;

}

  
// функция драйвера для проверки различного вывода

int main()

{

    // Этот вызов возвращает 3.44 типа doubleale

    cout << findMin(4, 3.44) << endl;

  

    // Этот вызов возвращает 3 двойного типа

    cout << findMin(5.4, 3) << endl;

  

    return 0;

}

Выход :

i3.44
3

Эта статья предоставлена Уткаршем Триведи. Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой теме

Рекомендуемые посты:

Вывод типа в C ++ (auto и decltype)

0.00 (0%) 0 votes