如果您创建模板函数但没有使用确定性实例,那么C++编译器会做什么

Fai*_*per 0 c++

我知道编写模板函数只是以一般方式编写内容,并且编译器应该根据程序的其余部分编写函数的实际实例.但请考虑以下计划:

#inlcude <time.h>
#include <stdlib.h>
#include <string>

template <typename T> void ptr_swap(T * a, T * b)
{
    T * temp = a; 
    a = b;
    b = temp;
}

int main()
{
     srand(time(NULL));
     std::string s1("Obama"), s2("Hillary");
     int i1(1), i2(69);
     if (rand() & 1 == 1) ptr_swap(&s1, &s2); 
     else ptr_swap(&i1, &i2);
     return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译器如何知道是否为strings或ints 构造ptr_swap函数?它只是确保"为任何事情做好准备",从而编写2个功能

void ptr_swap(std::string * a, std::string * b)
{
    std::string * temp = a; 
    a = b;
    b = temp;
}

void ptr_swap (int * a, int * b)
{
    int * temp = a; 
    a = b;
    b = temp;
}
Run Code Online (Sandbox Code Playgroud)

????

nvo*_*igt 6

编译器知道它必须构造两者.它确实如此.

  • @FailedSoftwareDeveloper:是的.还有什么明智的选择? (6认同)