加餐 | 部分课后思考题答案合集
吴咏炜
该思维导图由 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
《现代 C++ 编程实战》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(4)
- 最新
- 精选
- 晚风·和煦老师,c语言可以通过哪些方式实现c++中的私有成员呢?谢谢老师😃😃😃
作者回复: 实现?不太明白你的意思了。私有只是编译时的访问控制,不是运行时的。而C完全没有编译时的访问控制的机制。
2020-02-1331 - 幻境之桥"如果内容以一般的中文文本为主,那 UTF-16 效率最高。" 这是为什么呢?中文不应该是 GBK更省空间吗?
作者回复: 问题是“哪种 UTF 编码方式空间存储效率比较高”。GBK 不能支持很多其他语言,不在考虑范围内。
2020-02-1221 - 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
收起评论