关于关键字class和typename,下列表述正确的是( )。A.程序中所有的typename都可以替换为classB.程序中所有的class都可以替换为typenameC.A和B都正确D.A和B都不正确

题目

关于关键字class和typename,下列表述正确的是( )。

A.程序中所有的typename都可以替换为class

B.程序中所有的class都可以替换为typename

C.A和B都正确

D.A和B都不正确


相似考题
更多“关于关键字class和typename,下列表述正确的是()。A.程序中所有的typename都可以替换为classB.程序 ”相关问题
  • 第1题:

    下列模板声明中,有语法错误的是( )。A.templateT fun(T x){return x;}B.template

    下列模板声明中,有语法错误的是( )。

    A.template<typename T>T fun(T x){return x;}

    B.template<typename T>T fun(T x,int n){return x*n;}

    C.template<class T>T fun(T*p){return *p;}

    D.template<class T>T ClassA{T n;}


    正确答案:D
    解析:此题考查的是函数模板的声明。声明一个函数模板的格式为:template模板形参表声明>函数声明,其中的模板形参表声明>是由一个或多个“模板形参”组成的,每个“模板形参”可具有以下几种形式:typename参数名;class参数名;类型修饰参数名。而选项D)为定义类模板的格式,即template类型形参表,class类模板名>{};。

  • 第2题:

    关于关键字class和typename,下列描述正确的是( )。

    A.程序中所有的class都可以替换为typename

    B.程序中所有的typename都可以替换为class

    C.A和B都可以

    D.A和B都不可以


    正确答案:B

  • 第3题:

    ( 25 )有如下模板声明:

    template <typename T1, typename T2> class A;

    下列声明中,与上述声明不等价的是

    A ) template <class T1, class T2> class A;

    B ) template <class T1, typename T2> class A;

    C ) template <typename T1, class T2> class A;

    D ) template <typename T1, T2> class A;


    正确答案:D

  • 第4题:

    关于关键字class和typename,下列说法中正确的是

    A.程序中所有的typename都可以替换为class

    B.程序中所有的class都可以替换为typename

    C.A)和B)都正确

    D.A)和B)都不正确


    正确答案:B
    解析:只有在目标声明中,typename和class才可以相互替换,即typename可以被class替换,而有的class,不一定能被typename替换。

  • 第5题:

    有如下模板声明:

    template<typename T1,typename 12>class A;

    下列声明中,与上述声明不等价的是

    A.template<class T1,class T2>class A;

    B.template<class T1,typename T2>class A;

    C.template<typename TI,class T2>class A;

    D.template<typename T1,T2>class A;


    正确答案:D
    解析:定义函数模板时可以使用多个类型参数,这时每个类型参数前面都要加上关键字class或typename,其间用逗号分隔。

  • 第6题:

    当运算符重载为成员函数时,如果函数参数表中没有参数,则表明该重载为单目运算符,操作数就为该对象本身;如果函数参数表中有一个参数,则表示该重载为双目运算符,另外一个操作数为该对象本身。

    A.template<class T1,class T2>class A;

    B.template<class T1,typename T2>class A;

    C.template<typename T1,class T2>class A;

    D.template<typename T1,T2>class A;


    正确答案:D
    解析:在模板定义中,一般情况下,class和typename可以互换。在选项D中,T2没有类型参数限制定义,所以和题干给出的定义不同。

  • 第7题:

    关于关键字class和typename,下列表述中正确的是( )。 A. 程序中的typename都可以替换为classS

    关于关键字class和typename,下列表述中正确的是( )。

    A. 程序中的typename都可以替换为class

    B.程序中的class都可以替换为typename

    C.在模板形参表中只能用{ypename来声明参数的类型

    D.在模板形参表中只能用class或typenanle来声明参数的类型


    正确答案:A
    程序中的typename都可以替换为class,但程序中的class不可以全部替换为typename。在模板类型形参中除了typename和class以外,也可以用常规类型来声明参数的类型,所以C、D选项错误。

  • 第8题:

    有如下函数模板: template T cast(Uu){ return u;} 其功能是

    有如下函数模板: template<typename T,typename U> T cast(Uu){ return u;} 其功能是将U类型数据转换为T类型数据。已知i为int型变量,下列对模板函数cast的调用中正确的是

    A.cast(i);

    B.cast<>(i);

    C.cast<char*,int>(i);

    D.cast<double,int>(i);


    正确答案:D
    解析:本题考查的知识点是模板函数的调用。在调用一个模板函数时,编译系统需要足够的信息来判别每个虚拟类型参数所对应的实际类型,可以从两个不同的渠道获得这样的信息:从模板的实参表(用<和>括起来的参数表)或从模板函数实参表 (用(和)括起来的参数表),模板实参的信息优先于函数实参的信息。如果从后者获得的信息已经能够判定其中部分或全部虚拟类型参数所对应的实际参数,而且它们又正好是参数表中最后的若干参数,则模板实参表中的那几个参数可以省略。如果模板实参表中的实参都被省略了,则连空表<>也可以不要。本题中cast()函数的实参 i只能确定模板参数u的类型为int,而不能确定另外一个模板参数T。故选项A与B不正确。选项C希望将int转型为char*,C++中不允许隐式的这样转换类型,所以也不正确。故应该选择D。

  • 第9题:

    下列关于模板形参的描述中,错误的是

    A.模板形参表必须在关键字template之后

    B.模板形参表必须在关键字template之后

    C.可以用class修饰模板形参

    D.可以用typename修饰模板形参


    正确答案:B
    解析:对函数模板,模板的一般格式为:
      templatetyname类型参数>函数类型函数名(形参){函数体}
      对类模板,一般格式为:
      templateclass类型参数>class类名{……},类型参数是用一对>括起来。

  • 第10题:

    在下列模板说明中,正确的是()

    • A、template〈typename T1,T2〉
    • B、template〈class T1,T2〉
    • C、template〈typename T1,typename T2〉
    • D、template(typedef T1,typedef T2)

    正确答案:C

  • 第11题:

    单选题
    关于关键字class和typename,下列表述中正确的是(  )。
    A

    程序中的typename都可以替换为class

    B

    程序中的class都可以替换为typename

    C

    在模板形参表中只能用typename来声明参数的类型

    D

    在模板形参表中只能用class或typename来声明参数的类型


    正确答案: B
    解析:
    关键字class除了能用来定义类以外还能用来声明模板的虚拟类型参数,在用作声明虚拟类型参数时typename与class可以互换,但不能使用typename来定义类,因此程序中的typename都可以替换为class,而定义类的地方只能用class,不能用typename。在模板形参表中除了可以用typename和class声明虚拟类型参数外,还可以使用普通类型声明常规函数。

  • 第12题:

    单选题
    下列关于模板形参的描述中,错误的是(  )。
    A

    模板形参表必须在关键字template之后

    B

    模板形参表必须用括弧( )括起来

    C

    可以用class修饰模板形参

    D

    可以用typename修饰模板形参


    正确答案: A
    解析:
    声明一个函数模板的格式是:template<<模板形参表>><函数声明>,其中的<模板形参表>是由一个或多个<模板形参>组成,每个<模板形参>具有下面的几种形式:typename<参数表>;class<参数名>;<类型修饰><参数名>。由此可知,模板形参表必须用< >括起来,而不是( )。

  • 第13题:

    关于关键字class和typename,下列表述正确的是

    A.程序中所有的typename都可以替换为class

    B.程序中所有的class都可以替换为typename

    C.A)和B)都正确

    D.A)和B)都不正确


    正确答案:A

  • 第14题:

    ( 15 )下列关于模板形参的描述中,错误的是

    A )模板形参表必须在关键字 template 之后

    B )模板形参表必须用括弧 ( ) 括起来

    C )可以用 class 修饰模板形参

    D )可以用 typename 修饰模板形参


    正确答案:B

  • 第15题:

    关键字class和typename用于定义模板类型参数,其含义为()。

    A、任何用户定义的类类型

    B、C++内部的类型

    C、A与B

    D、都不是


    参考答案:C

  • 第16题:

    下列关于模板形参的描述中,错误的是

    A.模板形参表必须在关键字template之后

    B.模板形参表必须用括弧()括起来

    C.可以用class修饰模板形参

    D.可以用typename修饰模板形参


    正确答案:B
    解析:模板参数位于函数模板名称的前面,在一对尖括号内部进行声明,如:template<typename T>//T是模板参数在函数模板内部,不能指定缺省的模板实参。根据以上定义可知选项B)是错误的。

  • 第17题:

    关于关键字class和typename,下列描述中正确的是( )。

    A.程序中所有的class都可以替换为typename

    B.程序中所有的typename都可以替换为class

    C.选项A)和B)都正确

    D.选项A)和B)都错误


    正确答案:B
    解析:模板形参有3种形式:typename参数名;class参数名;类型修饰参数名。前两种是等价的,在声明模板参数时,关键字typename和class可以互换。

  • 第18题:

    对于模板定义关键宁class和typename说法不正确的是( )。

    A.程序中的class并不能都替换为typename

    B.class和typename都可互相替换

    C.程序中的typename都能替换为class

    D.程序中的部分class可以替换为typename


    正确答案:B

  • 第19题:

    下列的模板说明中,正确的是( )。A.template B.template C.template

    下列的模板说明中,正确的是( )。

    A.template <T1,T2>

    B.template <class T1,T2>

    C.template <class T1,class T2>

    D.template <typename T1;typename T2>


    正确答案:A
    解析:模板说明,要求每个参数前都有一个类型参数,多个参数需用逗号隔开。

  • 第20题:

    下列模板声明中有语法错误的是A.templateT fun(T x){return x;}B.template

    下列模板声明中有语法错误的是

    A.template<typename T>T fun(T x){return x;}

    B.template<typename T>T fun(T x,int n){return x术n;}

    C.template<class T>T fun(T*P){return*P;}

    D.template


    正确答案:C

  • 第21题:

    有如下模板声明:templateclass A;下列声明中,与上述声明不等价的是A.t

    有如下模板声明: template<typename T1,typename T2>class A; 下列声明中,与上述声明不等价的是

    A.template<class T1,class T2>class A;

    B.template<class T1,typename T2>class A;

    C.template<typename T1,class T2>class A;

    D.template<typename T1,T2>class A;


    正确答案:D
    解析:在模板定义中,一般情况下,class和typename可以互换。在选项D中,T2没有类型参数限制定义,所以和题干给出的定义不同。

  • 第22题:

    单选题
    在下列模板说明中,正确的是()
    A

    template〈typename T1,T2〉

    B

    template〈class T1,T2〉

    C

    template〈typename T1,typename T2〉

    D

    template(typedef T1,typedef T2)


    正确答案: B
    解析: 暂无解析

  • 第23题:

    单选题
    下列关于模板的叙述中,错误的是(  )。
    A

    调用模板函数时,在一定条件下可以省略模板实参

    B

    可以用int、double这样的类型修饰符来声明模板参数

    C

    模板声明中的关键字class都可以用关键字typename替代

    D

    模板的形参表中可以有多个参数


    正确答案: A
    解析:
    在声明函数模板时,关键字typename和class可以互换,两者是等价的;但在类模板声明中,替换可能会引起麻烦。

  • 第24题:

    单选题
    有如下模板声明:template class A;下列声明中,与上述声明不等价的是(  )。
    A

    template<class T1,class T2> class A;

    B

    template<class T1,typename T2> class A;

    C

    template<typename T1,class T2> class A;

    D

    template<typename T1,T2> class A;


    正确答案: B
    解析:
    在类模板中,数据类型本身是它的参数,因而是一种参数化类型的类,是类的生成器。对于本题来说,模板形参表中包括类型Tl和T2两个类型参数,D项,T1说明其类型,而T2没有说明其类型,与题干中的模板说明不一致。