现代 C++ 编程实战
吴咏炜
前 Intel 资深软件架构师
34196 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 51 讲
加餐 (1讲)
现代 C++ 编程实战
15
15
1.0x
00:00/00:00
登录|注册

加餐 | 部分课后思考题答案合集

概念
并发编程
C++ REST SDK
多态
UTF-32处理
赋值和返回值优化
输入行迭代器
容器设计
智能指针
现代C++实战30讲

该思维导图由 AI 生成,仅供参考

你好,我是吴咏炜。这一讲我为你整理了本专栏部分课后思考题的答案,给你作为参考。

第 2 讲

你觉得智能指针应该满足什么样的线程安全性?
答:(不是真正的回答,只是描述一下标准中的智能指针的线程安全性。)
多个不同线程同时访问不同的智能指针(不管是否指向同一个对象)是安全的。
多个不同线程同时读取同一个智能指针是安全的。
多个不同线程在同一个智能指针上执行原子操作(atomic_load 等)是安全的。
多个不同线程根据同一个智能指针创建新的智能指针(增加引用计数)是安全的。
只会有一个线程最后会(在引用计数表示已经无引用时)调用删除函数去销毁存储的对象。
其他操作潜在是不安全的,特别是在不同的线程对同一个智能指针执行 reset 等修改操作。

第 3 讲

为什么 smart_ptr::operator= 对左值和右值都有效,而且不需要对等号两边是否引用同一对象进行判断?
答:我们使用值类型而非引用类型作为形参,这样实参永远会被移动(右值的情况)或复制(左值的情况),不可能和 *this 引用同一个对象。

第 4 讲

为什么 stack(或 queue)的 pop 函数返回类型为 void,而不是直接返回容器的 top(或 front)成员?
答:这是 C++98 里、还没有移动语义时的设计。如果 pop 返回元素,而元素拷贝时发生异常的话,那这个元素就丢失了。因而容器设计成有分离的 top(或 front)和 pop 成员函数,分别执行访问和弹出的操作。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文总结了《现代C++实战30讲》部分课后思考题的答案合集。文章围绕智能指针的线程安全性、`smart_ptr::operator=`的有效性、`stack`和`queue`的设计、容器提供的`begin`和`end`方法、输入行迭代器的行为、赋值操作的影响、UTF-32的处理简易性、不同语言对多态方式的支持等内容展开讨论。其中,对智能指针的线程安全性、`stack`和`queue`的设计、输入行迭代器的行为等进行了详细解释和思考。此外,还提到了赋值操作的影响、UTF-32的处理简易性以及不同语言对多态方式的支持。文章内容涵盖了C++编程中的一些关键概念和技术特点,对于想要深入了解现代C++编程的读者具有一定的参考价值。 文章中还包括了对`compose`函数的定义、`make_integer_sequence`的实现、并发编程中可能发生死锁的情况、C++ REST SDK接口的改进意见以及“概念”对开发带来的好处和负面影响。这些内容涉及了C++编程中的实际问题和技术挑战,对读者了解现代C++编程的实践应用具有一定的启发意义。文章内容丰富多样,涵盖了C++编程中的一些关键概念和技术特点,对于想要深入了解现代C++编程的读者具有一定的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《现代 C++ 编程实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(4)

  • 最新
  • 精选
  • 晚风·和煦
    老师,c语言可以通过哪些方式实现c++中的私有成员呢?谢谢老师😃😃😃

    作者回复: 实现?不太明白你的意思了。私有只是编译时的访问控制,不是运行时的。而C完全没有编译时的访问控制的机制。

    2020-02-13
    3
    1
  • 幻境之桥
    "如果内容以一般的中文文本为主,那 UTF-16 效率最高。" 这是为什么呢?中文不应该是 GBK更省空间吗?

    作者回复: 问题是“哪种 UTF 编码方式空间存储效率比较高”。GBK 不能支持很多其他语言,不在考虑范围内。

    2020-02-12
    2
    1
  • Peter
    如果 pop 返回元素,而元素拷贝时发生异常的话,那这个元素就丢失了。因而容器设计成有分离的 top(或 front)和 pop 成员函数,分别执行访问和弹出的操作。~老师,想问下这个拷贝是指将POP返回的值给其他元素的时候吗?但是POP本来就是弹出元素,丢失应该也没关系的吧,有点不是很理解

    作者回复: pop 返回元素,指的是 pop 同时具有返回第一个元素和将其弹出两个功能。丢失了,“返回元素”这个功能不就出问题了么?

    2021-12-03
  • 吴咏炜
    第 18 讲第 2 题有一个 C++14/17 里也能接受的解,就是要先初始化数组,然后再改写其中的内容。 把文中的 bit_count_t 定义改成下面的形式即可(加上“{}”): template <size_t N> struct bit_count_t { constexpr bit_count_t() { for (auto i = 0U; i < N; ++i) { count[i] = count_bits(i); } } unsigned char count[N]{}; }; “unsigned char count[N]{};”也可以考虑改用 std::array: std::array<char, N> count{}; 使用 std::array 的话,我们可以考虑不再需要 bit_count_t 结构,因为可以让 get_bit_count 直接返回一个 std::array<char, 256>(返回 char [256] 则不可行)。
    2021-03-26
收起评论
大纲
固定大纲
第 2 讲
第 3 讲
第 4 讲
显示
设置
留言
4
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部