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。