Как шаблон в c ++ на самом деле работает в фоновом режиме? - PullRequest
1 голос
/ 20 июня 2020

**, почему вывод кода:

  x = 1 count = 0

  x = 1 count = 1

 x = 1.1 count = 0

**

//code for template
#include <iostream>
using namespace std;

template <typename T>
void fun(const T&x)
{
    static int count = 0;
    cout << "x = " << x << " count = " << count << endl;
    ++count;
    return;
}

int main()
{
    fun<int> (1);//for int
    cout << endl;
    fun<int>(1);//for int
    cout << endl; 
    fun<double>(1.1);//for int
    cout << endl;
    return 0;
}

Is Compiler создает новый экземпляр функции шаблона для каждого типа данных в c ++ в приведенном выше коде а также как мы можем присвоить rvalue ссылочной переменной при вызове функции fun ()?

1 Ответ

3 голосов
/ 20 июня 2020

В вашем коде вы использовали шаблон для создания двух функций, одна функция использует тип int, другая функция использует тип double:

void fun(const int &x)
{
    static int count = 0;
    cout << "x = " << x << " count = " << count << endl;
    ++count;
    return;
}

void fun(const double &x)
{
    static int count = 0;
    cout << "x = " << x << " count = " << count << endl;
    ++count;
    return;
}

Компилятор может распознать второй fun<int>(1) как вызов указанной выше целочисленной функции, поэтому нет необходимости создавать третью функцию.

Передача по ссылке или const ссылка такая же, как с функциями template, как и с обычными функциями ; template влияет только на тип данных, а не на то, как передаются параметры.

...