当前位置:   article > 正文

c++函数(三)习题讲解

c++函数(三)习题讲解

1.【单选题】

template < typename T1, typename T2 >

decltype(auto) ave(T1 &a,T2 &b)

{

        return a > b ? a : b;

}

int a { 100 };

float b {100 };

ave(a,b);

std::cout << typeid ( ave(a, b) ).name();

返回的是什么类型?

A float&         B int&         C float

解析:这道题答案选C。ave 函数传递了两个数据类型的参数,一个是 int 类型,一个是 float 类型,在进行运算的时候会发生类型转换,而 float 类型的优先级要大于 int 类型,所以返回的是 float 类型,那为什么不是引用类型呢?这是因为 进行类型转换之后,无法返回原来的值本身。所以选 C。

2.【单选题】

template< typename T1 >

decltype( auto ) ave(T1 &a,T2 &b)

{

        return a + 1;

}

int ave( int a)

{

        return a + 2;

}

ave ( 3 )=?

A 3         B 4         C 5

解析:这道题考查的是 当模板函数和 重载函数同时存在时,他俩的优先级的高低,重载函数的优先级大于模板函数,答案选C。

3.【单选题】

int ave( int a)

{

        static int count { 10 };

        return a + count++;

}
int main()

{

        int d = ave( 2 );

        int c = ave( 3 );

        c = ?

}

A 13         B 14         C 15

解析:这道题考察 静态变量。当执行 ave(2)后,count 的值为 11,c 的值为 3 + count++,count++ 是后置递增,所以 c 的值为 14,答案选B。        

4.【单选题】

int a { 100 };

#define _H_

#ifdef _H_

a++;

#endif

a++;

a = ?

A 100         B 101        C 102

解析:这道题考察预处理指令,#define _H_ 定义了一个 宏,#ifdef _H_判断宏存在,之后 执行 a++ ,之后又执行 a++ ,结果 a = 102,选C。

5.【单选题】

int a { 100 };

#define _H_

#ifdef _H_

a++;

#endif

#ifdef  _H_

#define _H_

a++;

#endif

a++;

a = ?

A 101         B 102        C 103

解析:这道题中第二个 #ifdef  _H_ 之后的代码没有执行,因为 _H_ 已经定义了,所以 a 加了 2 次,答案选B。        

6.【单选题】

以下那种函数调用约定支持不定量参数:

A _cdecl

B_stdcall

C _fastcall

解析:_cdecl :这种方式是由函数调用者负责清除栈中的函数参数,所以这种方式支持可变参数,比如printf就是使用__cdecl调用方式。_stdcall:由于这种方式要求被调用者自己平衡栈,所以不支持不定参数。_fastcall:由于使用了寄存器传递参数,它通常比 _cdecl 和 _stdcall 更快,但同样不支持可变数量的参数。综上所述选A。

7.【单选题】

以下那种函数调用约定速度最快:

A _cdecl

B_stdcall

C _fastcall

解析:这道题和上一道题差不多,所以选C。

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号