C++
文章平均质量分 70
瑜陀
Sophomore, major in Computer Science.
展开
-
C++并发:线程函数传参(二)
当向线程函数传参时,可能发生隐式类型转换,这种转换是在子线程中进行的。需要注意,由于隐式转换会构造临时对象,并将该对象(是个右值)传入线程函数,因此线程函数的形参应该是可接受右值类型的T、const T&或T&&类型,但不能是T&类型。此外,如果源类型是指针或引用类型时,还要防止可能发生悬空指针和悬空引用的现象。原创 2024-05-10 00:10:13 · 162 阅读 · 0 评论 -
C++并发:线程函数传参(一)
遇到的错误与尝试在 std::thread 构造器中使用不匹配的参数类型有关。错误的根本原因是在创建 std::thread 实例时传递的参数类型与线程函数所期望的参数类型不兼容。因此我们要考虑,传递的参数如何才能正确兼容线程函数期望的参数类型。这正是上面讨论到的一种情况,接着讨论如何优雅的解决这种问题。原创 2024-05-09 23:39:44 · 275 阅读 · 0 评论 -
C++:函数符(一)
相比之下,我们可以使用函数对象或者 lambda 表达式作为 std::for_each 的第三个参数,因为它们都是可调用对象。函数对象是一个类,重载了 operator() 运算符,可以像函数一样被调用。Lambda 表达式也是一个可调用对象,可以在需要时直接定义并使用。原创 2024-04-24 22:00:35 · 375 阅读 · 0 评论 -
C++:适配器
这些适配器类模板使得在不同场景下可以方便地使用不同的容器实现,同时提供了统一的接口,使得代码更加灵活和可复用。通过使用 STL 提供的适配器,可以更加方便地构造具有特定功能的容器,满足不同的需求。因此,stack、queue、priority_queue不被称为容器, 把它称为容器配接器。原创 2024-04-24 21:30:19 · 373 阅读 · 0 评论 -
C++:迭代器
需要注意的是,各种迭代器的类型并不是确定的,而只是一种概念性描述。 正如前面指出的,每个容器类都定义了一个类级 typedef 名称——iterator,因此 vector 类的迭代器类型为vector ::interator。然而,该类的文档将指出,矢量迭代器是随机访问迭代器,它允许使用基于任何迭代器类型的算法,因为随机访问迭代器具有所有迭代器的功能。原创 2024-04-23 21:45:57 · 609 阅读 · 0 评论 -
C++:智能指针(二)
这些智能指针的选择取决于所需的所有权模型和内存管理策略。使用适当的智能指针可以大大简化代码,提高程序的可维护性和可靠性。原创 2024-04-21 23:52:29 · 744 阅读 · 0 评论 -
C++:智能指针(一)
文章展示了如何正确地使用unique_ptr对象作为容器元素,并对show()函数的参数传递方式进行了解释,强调了按引用传递参数的重要性,以避免不必要的复制操作和编译错误。原创 2024-04-21 23:18:59 · 411 阅读 · 0 评论 -
C++:返回值优化
这种优化称为返回值优化(Return Value Optimization,简称 RVO),它能够提高程序的性能并减少不必要的对象拷贝。在这种情况下,编译器将对象直接构造在函数调用方指定的内存空间中,而不是通过复制构造函数创建临时对象。原创 2024-04-17 19:25:57 · 355 阅读 · 0 评论 -
C++:异常处理
可以看到catch()的参数尽管可以被设为引用,但是其实仍然要发生异常对象的复制(用复制构造函数)。如果没有被设置为引用,那么在最后,不仅要析构异常对象副本,还要析构异常对象本身。原创 2024-04-17 18:01:19 · 332 阅读 · 0 评论 -
C++:弃值表达式
弃值表达式是一种编程技巧,用于清除不必要的警告或明确表示我们不关心某些表达式的返回值,而只关注它的副作用。原创 2024-04-11 20:41:12 · 301 阅读 · 0 评论