C++基础测试题之选择题

选择题

1. 下面关于纯虚函数的说法,正确的是?

A. 析构函数不能是纯虚函数

B. 重写基类纯虚函数时函数的返回值类型必须保持不变

C. 纯虚函数可以是内联函数

D. 运算符重载函数不能是纯虚函数

2. 下面关于throw表达式的说法正确的是?

A. throw抛出指针时指向的对象类型可以是不完整类型

B. throw;可重抛当前异常,只能在catch块中使用

C. throw表达式可以出现在return语句中

D. 使用noexcept声明的函数中不能使用throw语句抛出异常

3. 已知Base *p = new Derived;

其中Base是Derived的多个公开非虚基类之一,且Base是多态类,

下面关于对p进行强制类型转换的表达式一定正确的是

A. static_cast<Derived *>(p) == static_cast<void *>(p)

B. const_cast<const Base *>(p) == dynamic_cast<void *>(p)

C. dynamic_cast<Derived *>(p) == dynamic_cast<void *>(p)

D. reinterpret_cast<Derived *>(p) == static_cast<Derived *>(p)

4. 下面关于内联函数(inline)的说法正确的是?

A. 内联函数拥有内部链接

B. 模板函数都是内联函数

C. 同一内联函数的函数指针在多个编译单元中不一定比较相等

D. constexpr函数都是内联函数

5. 下列关于运算符重载的说法正确的是?

A. 运算符重载函数的参数个数与该运算符的操作数个数相等

B. 重载operator delete函数参数列表只能有一个void *指针

C. 重载关系运算符的函数返回值类型不一定是bool

D. 重载函数调用运算符的函数可以是静态成员函数

6. 下列关于友元函数的说法正确的是?

A. 友元函数可以被继承

B. 友元函数不能是虚函数

C. 类模板内的声明的友元函数是函数模板

D. 通过友元声明首次定义的函数可以通过参数依赖查找进行引用

7. 下面关于RTTI的说法,正确的是?

A. 使用typeid前必须包含<type_info>头文件

B. typeid只能用于多态类型或表达式

C. typeid可以用于不完整类型

D. 已知dynamic_cast<D *>(p) != nullptr,则typeid(*p)==typeid(D)

8. 下面关于nullptr的说法中,错误的是?

A. nullptr是纯右值

B. nullptr是C++关键词

C. static_cast<int>(nullptr) == 0

D. nullptr == NULL

9. 已知using namespace std::literals;

下列关于用户定义字面量的说法正确的是?

A. +1s的类型是std::chrono::duration<int>

B. "van"s的类型是std::string

C. 11.4514min的类型是std::chrono::minutes

D. 4i的类型是std::complex<int>

10. 下面关于模板参数的说法正确的是?

A. 模板参数只能是类类型,不能是基本数据类型

B. 非类型模板参数的类型可以是指针

C. 模板参数列表中只能有一个变长模板参数,并且它必须位于模板参数列表最后

D. 模板参数不能是不完整类型

11. 以下哪个选项中的代码不是合法的C++表达式?

A. (0b1'00'01l)

B. (061'00'01i)

C. (06|'01'011)

D. (0b1'01'0|1)

12. 下面关于extern的说法,正确的是?

A. extern "C++" const int a; 拥有内部链接

B. extern "C" int b = 2; 拥有外部链接

C. extern template int c<int>(); 是模板显式实例化定义

D. extern和inline说明符不能同时使用

13. 下列不等式一定成立的是?

A. sizeof short < sizeof long

B. true + false < true + true

C. NULL < '0'

D. "hello" < "world"

14. 下面关于字符串的说法,正确的是?

A. std::string_view可以隐式转换为std::string

B. 字符串字面量是泛左值

C. std::stoi转换失败时会返回空字符串

D. 字符串字面量的类型是const char *

15. 在C++17中下面关于auto的语句,正确的是?

A. auto a(int());

B. template<auto> class b;

C. return new auto(*this);

D. int d(auto());

16. 以下关于static关键词的说法正确的是?

A. 若类Foo定义静态成员变量 static Foo instance; 则需要在某一编译单元的全局作用域中添加 static Foo Foo::instance; 类外定义以防止链接错误

B. C++标准确保静态局部变量一定会被初始化一次并且只会被初始化一次

C. 若定义某对象于全局作用域且未使用static说明符,则它一定拥有外部链接

D. 若静态局部变量被成功初始化,则它的析构函数会在程序正常退出时执行

17. 以下关于异常的说法正确的是:

A. 析构函数和operator delete重载函数隐含noexcept

B. throw; 语句可以重新抛出当前异常,它只能在catch块中使用

C. 构造函数的成员初始化列表中抛出异常,一定会调用当前对象的析构函数

D. new表达式只会抛出std::bad_alloc异常

18. 下列哪一项不是C++关键词?

A. mutable

B. override

C. operator

D. export

19. 下面关于拷贝的说法,正确的是?

A. 拷贝构造函数不能声明为explicit

B. 模板函数不能是拷贝构造函数

C. 拷贝赋值运算符重载函数不能是虚函数

D. 拷贝赋值运算符重载函数的参数不能按值传递

20. 下面关于运算符重载的说法正确的是?

A. operator?:不能被重载

B. operator&是二元运算符

C. 所有的成员访问运算符都不能重载

D. 重载operator!=后编译器会自动生成operator==

21. 下面关于this的说法正确的是?

A. this是纯右值,*this是左值

B. this不能在非静态成员函数中使用

C. this不能在成员初始化列表中出现

D. this指针出现在成员函数的首个参数

22. 下面关于lambda表达式的说法错误的是?

A. lambda表达式是纯右值

B. decltype([]{})表示的类型是void(*)()

C. lambda表达式拥有的闭包类型可以被继承

D. lambda表达式的函数体可以返回lambda表达式

23. 下面关于全局变量的说法,正确的是?

A. 全局变量构造函数抛出异常可以在main函数捕获

B. 全局变量析构函数一定会在程序终止时执行

C. 单个编译单元内全局变量的构造顺序是未指定的

D. 没有指定初始化的整数全局变量都是0

24. 下面关于constexpr的说法正确的是?

A. 调用constexpr函数一定会在编译期计算结果

B. constexpr函数声明隐含noexcept

C. constexpr函数是内联函数,并且不能取地址

D. constexpr静态成员变量是左值

25. 下面关于指针类型的说法正确的是?

A. 任意类型的指针都可以隐式转换为void *

B. 两个指针变量做减法的结果类型是std::ptrdiff_t

C. 数组变量作为实参传递时会退化为指向数组的指针

D. 指针类型都是随机访问迭代器

26. 下面关于std::bind的说法正确的是?

A. std::bind的返回值类型是std::function模板的实例

B. std::bind可以绑定类成员函数指针或类成员变量指针

C. std::bind返回的函数对象可以接受任意个数的参数

D. std::bind调用时每个绑定占位符(如std::placeholders::_1)只能使用一次

28. 下面关于new的说法正确的是?

A. 使用new int[N]分配数组时允许N==0

B. 全局operator new函数可以被重载,但是不能被显式调用

C. 调用new表达式只可能抛出std::bad_alloc异常

D. new T、new T()、new T{}是等价的

28. 以下使用标准库容器的操作,正确的是?

A. 已知vector<int> v; 使用v.swap(v);收缩已分配的内存

B. 已知map<std::string, int> m; 使用m[""]访问未在容器中的值

C. 已知list<int> l; 使用std::sort(l.begin(), l.end())进行排序

D. 已知array<float, 4> a; 使用a.erase(a.begin())删除头部元素

29. 在下面的结构体定义中去除一个成员变量,使得sizeof(Foo)最小

(假设为32位Windows环境,使用MSVC 19.26编译器)

struct Foo{char A;int B;short C;long D;};

30. 下面关于C++线程库的说法正确的是?

A. std::mutex的加锁和解锁的操作可以在不同的线程进行

B. 通过std::async得到的std::future对象析构函数会阻塞直到异步操作完成

C. 多个线程同时调用std::promise::set_value是线程安全的

D. 使用thread_local关键词前必须#include <thread>

31. 下面关于operator delete的说法中正确的是?

A. 在使用自定义的全局重载operator delete之前,必须#include <new>

B. 类特定operator delete重载函数必须添加static关键词声明为静态成员函数

C. 若基类声明了虚析构函数,则派生类重载的类特定operator delete也具有多态性

D. operator delete重载函数不能是友元函数

32. 下面关于函数模板和模板函数的说法,正确的是?

A. 函数模板不能全特化

B. 函数模板不能在函数体内声明

C. 模板函数的重载决议优先级低于非模板函数

D. 移动构造函数不能是模板函数

33. 以下哪个语句会得到和其他选项不一样的结果?

A. auto a(char());

B. auto a(char(0));

C. auto a(char{});

D. auto a(char{0});

34. 若x是变量,以下关于std::move的说法正确的是?

A. 必须要通过std::move才能把x转换为右值

B. std::move(x)返回右值,因此它不能出现在等号左边

C. std::move是函数模板

D. 定义变量 auto &&a = std::move(x); 则a是右值

35. 根据C++标准,下列关于sizeof(下称大小)的说法一定正确的是?

A. 派生类的大小 >= 其所有基类的大小之和

B. 在C++中所有种类的指针的大小都相等,且等于 sizeof(void*)

C.同一平台上内建bool类型的大小一定大于等于char类型的大小,即sizeof(bool) >= sizeof(char)

D. 联合体(union)的大小等于它所有的成员中占用空间最大的一个成员的大小

36. 下面关于联合体的说法正确的是?

A. 联合体可以继承联合体,但不能继承结构体

B. 联合体不能为空

C. 联合体不能有受protected访问控制的成员

D. 联合体模板可以偏特化

答案:

CCCDCDCCBBCBBBADABBAABDDBBAABB

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
如果你是使用编程语言来实现单项选择题考试系统的话,删除试的逻辑一般如下: 1. 首先,让用户输入要删除的试的编号或者目名称。 2. 遍历试列表,找到对应的试。 3. 如果找到了试,将其从试列表中删除。 4. 如果没有找到试,提示用户试不存在。 下面是一个示例代码,可以供你参考: ```c++ #include <iostream> #include <vector> #include <string> using namespace std; // 定义试结构体 struct Question { int id; // 试编号 string content; // 试内容 string optionA; // 选项A string optionB; // 选项B string optionC; // 选项C string optionD; // 选项D char answer; // 正确答案 }; // 试列表 vector<Question> questions; // 删除试函数 void deleteQuestion(int id) { for (auto it = questions.begin(); it != questions.end(); ++it) { if (it->id == id) { questions.erase(it); cout << "删除成功!" << endl; return; } } cout << "试不存在!" << endl; } int main() { // 初始化试列表 Question q1 = {1, "C++是一种什么类型的语言?", "A. 编译型语言", "B. 解释型语言", "C. 汇编语言", "D. 机器语言", 'A'}; Question q2 = {2, "下列哪个不是C++的基本数据类型?", "A. int", "B. float", "C. bool", "D. string", 'D'}; questions.push_back(q1); questions.push_back(q2); // 删除试 deleteQuestion(2); // 输出剩余试 cout << "剩余试:" << endl; for (auto q : questions) { cout << q.id << ". " << q.content << endl; } return 0; } ``` 以上代码中,deleteQuestion函数用于删除试,需要传入一个试编号作为参数。如果找到对应的试,就从试列表中删除;否则,提示试不存在。在main函数中,我们初始化了两个试,然后删除了编号为2的试。最后,输出剩余试的内容。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小鸭文库

你的鼓励是我前进的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值