首页 > 试题广场 >

关于函数模板,描述错误的是()。

[不定项选择题]
关于函数模板,描述错误的是()
  • 函数模板必须由程序员实例化为可执行的函数模板
  • 函数模板的实例化由编译器实现
  • 一个类定义中,只要有一个函数模板,这个类就是类模板
  • 类模板的成员函数都是函数模板,类模板实例化后,成员函数也随之实例化
A错误,函数模板必须由程序员实例化为可执行的函数;
B正确,函数模板和类模板的实例化都是由编译器实现的;
C错误,类模板中的成员函数都是函数模板;
D错误,类模板实例化后,没有用到的成员函数没有实例化;
发表于 2019-03-04 17:09:36 回复(2)

函数模板是C++新增的一种性质,它允许只定义一次函数的实现,即可使用不同类型的参数来调用该函数。这样做可以减小代码的书写的复杂度,同时也便于修改。但是,在代码中包含函数模板本身并不会生成函数定义,它只是一个用于生成函数定义的方案。编译器使用模板为特定类型生成函数定义时,得到的是模板实例(instantiation)。 A错误,函数模板必须由编译器根据程序员的调用类型实例化为可执行的函数

https://blog.csdn.net/qq_30835655/article/details/76850894?utm_source=copy 

C错误,类模板的成员函数都是函数模板
D错误,没使用过的成员函数(即函数模板)不会被实例化


函数模板:
template<class T> max(const T a, const T b)
{
return (a>b ? a : b);
}
这样用:
//int
int a = 1, b = 2;
max(a, b);
//float
float c = 1.0f, d = 2.0f;
max(c, d);
//double
double e = 1.0, f = 2.0;
max(e, f);
//...
类模板:
template<class T>
class C
{
public:
T max(const T a, const T b)
{
return (a>b ? a : b);
}
};
对这个类进行实例化:
//int
C<int> cn;
//float
C<float> cf;
//double
C<double> cd;
编辑于 2018-10-06 19:44:08 回复(0)
函数模板和类模板都是由编译器实例化!
发表于 2018-05-10 10:09:05 回复(0)
函数模板的实例化是由编译器来进行的,而类模板全部是由函数模板所构成的,在类模板进行实例化时,函数模板并不会被全部实例化,而是用到的时候有由编译器进行实例化。
发表于 2020-08-10 19:45:53 回复(0)
同样一个题目,上回选D这次选A,不觉得很怪吗
发表于 2018-07-06 17:52:48 回复(0)
ACD好吗,怎么还单选了
发表于 2018-06-24 13:28:28 回复(1)
C选项我觉得是对的,逻辑是一个类中如果存在一个或以上的函数模板,则这个类是模板类。上面好多人的逻辑都怪怪的………
发表于 2021-11-25 20:30:33 回复(0)
C选项说的是由一个类中的函数模板→这个类是类模板,不对吗?不能这样推断吗?
这是在说由函数模板推断类模板,为毛都在说类模板的成员函数都是函数模板???????
发表于 2019-04-11 20:43:12 回复(3)
未被使用过的类模板的成员函数不会被实例化,故D错。
发表于 2018-11-19 00:03:14 回复(0)
函数模板必须由程序员实例化为可执行的函数模板,明显是错的,类模板是由程序员显示指定。
CD明显也不对啊,类模板的定义都对不上!!!

发表于 2018-08-21 11:32:32 回复(0)
  • A错误,函数模板必须由程序员实例化为可执行的函数模板。这个说法并不准确。函数模板可以由程序员实例化,但也可以由编译器自动实例化。程序员可以显式地提供实参,也可以依赖编译器根据上下文进行隐式实例化。
  • B正确,函数模板和类模板的实例化都是由编译器实现的;
  • C错误, 一个类定义中,只要有一个函数模板,这个类就是类模板是错误的。一个类只有在至少包含一个类模板参数的时候才是类模板。
  • D错误,类模板实例化后,没有用到的成员函数没有实例化
     
发表于 2023-12-01 22:44:23 回复(0)
晕了,我就选了个b,完美错过
发表于 2023-07-18 13:09:13 回复(0)
#include<iostream>
using namespace std;

template<class T> T mymax(const T a,const T b)
{
    return (a > b ? a:b);
}

//类模板定义
template<class T>
class C
{
    public:
    T max(const T a,const T b) const
    {
        return (a > b ? a:b);
    }
    T min(const T a,const T b)const //如果没有使用过,这个也不实例化
    {
        return (a < b ? a: b);
    }
};


//这个不叫类模板,虽然类里面有函数模板
class D
{
    public:
    template<class T> T mymax(const T a,const T b)
    {
        return (a > b ? a:b);
    }
    void display(void)const
    {

    }
};

int main()
{
    int a = 1,b = 2;
    cout << mymax(a,b) << endl;
    float c = 1.0f,d = 2.5f;
    cout << mymax(c,d) << endl;
    double e = 1.0,f= 3.4;
    cout << mymax(e,f) << endl;

    C<int> cn;
    cout << cn.max(2,3) << endl;
    C<float> cf;
    cout << cf.max(1.0f,4.3f) << endl;

    D cd;
    cout << cd.mymax(3,5) << endl;
    return 0;
}

发表于 2022-07-23 10:54:59 回复(0)
函数模板:不同类型的参数的“相同”实现 , 具体实现由程序员指定类型,再由编译器完成具体的实现。
类模板的成员函数都是模板函数,反之不成立。
发表于 2022-01-22 17:37:47 回复(0)
没有使用过的函数模板未被实例化
发表于 2022-01-16 09:14:03 回复(0)
A错误,函数模板必须由程序员实例化为可执行的函数; B正确,函数模板和类模板的实例化都是由编译器实现的; C错误,类模板中的成员函数都是函数模板; D错误,类模板实例化后,没有用到的成员函数没有实例化;
发表于 2021-11-04 13:32:09 回复(0)
B 应该错吧,函数模版的特化应该算是程序员负责实例化的
发表于 2021-05-19 06:17:11 回复(0)

没有使用过的成员函数(函数模板)不会被实例话

发表于 2019-04-11 12:34:23 回复(0)