{"id":18656278,"url":"https://github.com/downdemo/effective-modern-cpp","last_synced_at":"2025-04-12T21:28:36.453Z","repository":{"id":49440325,"uuid":"175364094","full_name":"downdemo/Effective-Modern-Cpp","owner":"downdemo","description":"Zero Fluff, Max Value: Code-Driven Modern C++(11/14/17) Best Practices","archived":false,"fork":false,"pushed_at":"2025-01-28T21:33:19.000Z","size":60,"stargazers_count":261,"open_issues_count":0,"forks_count":47,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-04-04T01:09:25.755Z","etag":null,"topics":["best-practices","modern-cpp"],"latest_commit_sha":null,"homepage":"https://downdemo.github.io/Effective-Modern-Cpp/","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/downdemo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-03-13T06:56:45.000Z","updated_at":"2025-03-25T15:27:07.000Z","dependencies_parsed_at":"2024-11-22T07:02:42.182Z","dependency_job_id":"56b0fb7c-329d-4711-812f-216e5d2ade79","html_url":"https://github.com/downdemo/Effective-Modern-Cpp","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/downdemo%2FEffective-Modern-Cpp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/downdemo%2FEffective-Modern-Cpp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/downdemo%2FEffective-Modern-Cpp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/downdemo%2FEffective-Modern-Cpp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/downdemo","download_url":"https://codeload.github.com/downdemo/Effective-Modern-Cpp/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248633996,"owners_count":21136960,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["best-practices","modern-cpp"],"created_at":"2024-11-07T07:22:46.211Z","updated_at":"2025-04-12T21:28:36.422Z","avatar_url":"https://github.com/downdemo.png","language":"C++","readme":"* Modern C++ 一般指 C++11 及其之后的标准，已在工业界被广泛应用。 C++ 初学者适合从 *[C++ Primer](https://learning.oreilly.com/library/view/c-primer-fifth/9780133053043/)* 开始学习 Modern C++ 的基本语法，通过 *[Effective C++](https://learning.oreilly.com/library/view/effective-c-55/0321334876/)* 掌握 C++98 的最佳实践，通过 *[Effective STL](https://learning.oreilly.com/library/view/effective-stl/9780321545183/)* 掌握 STL 的正确使用，通过 *[Effective Modern C++](https://learning.oreilly.com/library/view/effective-modern-c/9781491908419/)* 掌握 C++11/14 的最佳实践，至此即可避开语言缺陷，得心应手地发挥 C++ 的长处。此为个人笔记，还将补充 C++17 相关特性。\n\n## [1. 类型推断](https://github.com/downdemo/Effective-Modern-Cpp/tree/master/docs/01_deducing_types.md)\n\n* 01 模板类型推断机制\n* 02 [auto](https://en.cppreference.com/w/cpp/language/auto) 类型推断机制\n* 03 [decltype](https://en.cppreference.com/w/cpp/language/decltype)\n* 04 查看推断类型的方法\n\n## [2. auto](https://github.com/downdemo/Effective-Modern-Cpp/tree/master/docs/02_auto.md)\n\n* 05 用 [auto](https://en.cppreference.com/w/cpp/language/auto) 替代显式类型声明\n* 06 [auto](https://en.cppreference.com/w/cpp/language/auto) 推断出非预期类型时，先强制转换出预期类型\n\n## [3. 转向现代 C++](https://github.com/downdemo/Effective-Modern-Cpp/tree/master/docs/03_moving_to_modern_cpp.md)\n\n* 07 创建对象时注意区分 () 和 {}\n* 08 用 [nullptr](https://en.cppreference.com/w/cpp/language/nullptr) 替代 0 和 [NULL](https://en.cppreference.com/w/cpp/types/NULL)\n* 09 用 [using 别名声明](https://en.cppreference.com/w/cpp/language/type_alias)替代 [typedef](https://en.cppreference.com/w/cpp/language/typedef)\n* 10 用 [enum class](https://en.cppreference.com/w/cpp/language/enum#Scoped_enumerations) 替代 [enum](https://en.cppreference.com/w/cpp/language/enum#Unscoped_enumeration)\n* 11 用 =delete 替代 private 作用域来禁用函数\n* 12 用 [override](https://en.cppreference.com/w/cpp/language/override) 标记被重写的虚函数\n* 13 用 [std::cbegin](https://en.cppreference.com/w/cpp/iterator/begin) 和 [std::cend](https://en.cppreference.com/w/cpp/iterator/end) 获取 const_iterator\n* 14 用 [noexcept](https://en.cppreference.com/w/cpp/language/noexcept_spec) 标记不抛异常的函数\n* 15 用 [constexpr](https://en.cppreference.com/w/cpp/language/constexpr) 表示编译期常量\n* 16 用 [std::mutex](https://en.cppreference.com/w/cpp/thread/mutex) 或 [std::atomic](https://en.cppreference.com/w/cpp/atomic/atomic) 保证 const 成员函数线程安全\n* 17 特殊成员函数的隐式合成与抑制机制\n\n## [4. 智能指针](https://github.com/downdemo/Effective-Modern-Cpp/tree/master/docs/04_smart_pointers.md)\n\n* 18 用 [std::unique_ptr](https://en.cppreference.com/w/cpp/memory/unique_ptr) 管理所有权唯一的资源\n* 19 用 [std::shared_ptr](https://en.cppreference.com/w/cpp/memory/shared_ptr) 管理所有权可共享的资源\n* 20 用 [std::weak_ptr](https://en.cppreference.com/w/cpp/memory/weak_ptr) 观测 [std::shared_ptr](https://en.cppreference.com/w/cpp/memory/shared_ptr) 的内部状态\n* 21 用 [std::make_unique](https://en.cppreference.com/w/cpp/memory/unique_ptr/make_unique)（[std::make_shared](https://en.cppreference.com/w/cpp/memory/shared_ptr/make_shared)） 创建 [std::unique_ptr](https://en.cppreference.com/w/cpp/memory/unique_ptr)（[std::shared_ptr](https://en.cppreference.com/w/cpp/memory/shared_ptr)）\n* 22 用 [std::unique_ptr](https://en.cppreference.com/w/cpp/memory/unique_ptr) 实现 [pimpl](https://en.cppreference.com/w/cpp/language/pimpl) 必须在源文件中提供析构函数定义\n\n## [5. 右值引用、移动语义和完美转发](https://github.com/downdemo/Effective-Modern-Cpp/tree/master/docs/05_rvalue_references_move_semantics_and_perfect_forwarding.md)\n\n* 23 [std::move](https://en.cppreference.com/w/cpp/utility/move) 和 [std::forward](https://en.cppreference.com/w/cpp/utility/forward) 只是一种强制类型转换\n* 24 转发引用与右值引用的区别\n* 25 对右值引用使用 [std::move](https://en.cppreference.com/w/cpp/utility/move)，对转发引用使用 [std::forward](https://en.cppreference.com/w/cpp/utility/forward)\n* 26 避免重载使用转发引用的函数\n* 27 重载转发引用的替代方案\n* 28 引用折叠\n* 29 移动不比拷贝快的情况\n* 30 无法完美转发的类型\n\n## [6. lambda 表达式](https://github.com/downdemo/Effective-Modern-Cpp/tree/master/docs/06_lambda_expressions.md)\n\n* 31 捕获的潜在问题\n* 32 用初始化捕获将对象移入闭包\n* 33 用 [decltype](https://en.cppreference.com/w/cpp/language/decltype) 获取 auto\u0026\u0026 参数类型以 [std::forward](https://en.cppreference.com/w/cpp/utility/forward)\n* 34 用 lambda 替代 [std::bind](https://en.cppreference.com/w/cpp/utility/functional/bind)\n\n## [7. 并发 API](https://github.com/downdemo/Effective-Modern-Cpp/tree/master/docs/07_the_concurrency_api.md)\n\n* 35 用 [std::async](https://en.cppreference.com/w/cpp/thread/async) 替代 [std::thread](https://en.cppreference.com/w/cpp/thread/thread)\n* 36 用 [std::launch::async](https://en.cppreference.com/w/cpp/thread/launch) 指定异步求值\n* 37 RAII 线程管理\n* 38 [std::future](https://en.cppreference.com/w/cpp/thread/future) 的析构行为\n* 39 用 [std::promise](https://en.cppreference.com/w/cpp/thread/promise) 和 [std::future](https://en.cppreference.com/w/cpp/thread/future) 之间的通信实现一次性通知\n* 40 [std::atomic](https://en.cppreference.com/w/cpp/atomic/atomic) 提供原子操作，volatile 禁止优化内存\n\n## [8. 其他轻微调整](https://github.com/downdemo/Effective-Modern-Cpp/tree/master/docs/08_tweaks.md)\n\n* 41 对于可拷贝的形参，如果移动成本低且一定会被拷贝则考虑传值\n* 42 用 emplace 操作替代 insert 操作\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdowndemo%2Feffective-modern-cpp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdowndemo%2Feffective-modern-cpp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdowndemo%2Feffective-modern-cpp/lists"}