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

1.【单选题】

关于左值右值下面说法正确的是?

A. 右值是出现在等号右面的值

B. 右值没有内存空间、

C. *(a + 1) = 2;其中a + 1是一个右值

解析:这道题考右值的概念,在C++中,右值是一个“临时对象”或“不持有对象身份的值”,它们可以是字面常量、临时对象或即将被销毁的对象。右值确实可能不“拥有”一个持久的、用户可见的内存地址(如字面常量或临时对象),但它们仍然需要内存来存储其值。根据上述描述,结果就选C。

2.【单选题】

关于栈的说法错误的是:

A 栈是一段连续的内存空间

B 栈溢出漏洞可能导致被攻击者获得计算机控制权限

C 栈是先进先出

解析:这道题考栈的基本概念。栈在内存中的表示确实是一段连续的内存空间,用于存储局部变量、方法调用等信息。栈缓冲区溢出是一种严重的安全漏洞,可能被攻击者利用来执行恶意代码或改变程序的行为。栈的特性是“后进先出”,而不是“先进先出”

3.【单选题】

int a = 5;

decltype( a++ )  x;

a = ?

A 5         B 6         C 0

解析:decltype是一个运算符,它返回操作数的类型。然而,当与后置递增运算符(++)一起使用时,decltype并不会实际执行递增操作,所以答案选A。

4.【单选题】

int a = 5;

auto x = ++a;

a = ?

A 5         B 6         C 0

解析:auto 关键字用于自动类型推导, 同时 将 ++a 赋值给变量 x,此时 a 的值为A。

5.【单选题】

int a = 5;

decltype( a++ ) x;

语句后 x是什么类型?

A int         B int&         C int*

解析:decltype(a++) 会推断出 a++ 表达式的类型。由于 a 是一个 int 类型的变量,并且 a++ 是后置递增操作符,它会返回 a 递增前的值(也就是 5),但这个值是一个右值,而不是引用或指针。因此,decltype(a++) 的结果是 int 类型。

6.【单选题】

int a = 5;

decltype(++a) x;

语句后 x是什么类型?

A int         B int&         C int*

解析:这里的 ++a 是一个前置递增,也就是一个左值,所以它返回的是一个引用类型,选B。

7.【单选题】

template<typename T1,typename T2>

auto ave(T1 &a,T2 &b)

{

        return a>b?a:b;

}

int a { 100 },b { 200 };

ave(a,b)返回的是什么类型?

A int         B int&         C int*

解析:这道题很简单,答案就是 int 类型。auto 是自动的推断类型,返回值就是一个 int 类型。

8.【单选题】

template<typename T1,typename T2>

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

{

        return a>b?a:b;

}

int a { 100 },b { 200 };

ave(a,b)返回的是什么类型?

A int         B int&         C int*

解析:这里decltype(auto) 作为返回类型,这意味着返回类型将由返回表达式的类型决定。由于 a 和 b 都是引用类型(T1& 和 T2&),decltype(auto) 会保留这些引用,所以答案选B。

  • 13
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值