014 17s nested namespace

Video Link: C++ Weekly - Ep 22 C++17’s Nested Namespaces and std::clamp Verification Case 嵌套命名空间是一个非常小的写法改进,如: 1 2 3 4 // Style1 namespace A { namespace B { namespace C { }}} 或: 1 2 3 4 5 6 7 8 // Style2 namespace A { namespace B { namespace C

013 17s if with initializer

Video Link: C++ Weekly - Ep 21 C++17’s if and switch Init Statements 应用场景 首先看下其等效表达[1]: 1 2 3 4 5 6 7 { init_statement if constexpr(optional) ( condition ) statement-true else statement-false } 与普通的if几乎相同,唯一的区别是最外层的{

012 17s constexpr if

Video Link: C++ Weekly - Ep 18 C++17’s constexpr if Verification Case constexpr if用于在编译期进行分支选择,不满足条件的分支在编译期被丢弃。从某种程度上来说,constexpr if有着#if.

010 17s invoke

Video Link: C++ Weekly - Ep 17 C++17’s std::invoke Background 非静态成员函数与普通函数在使用函数指针进行调用的方式不同[1][2]。 普通函数指针: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 int sum(int lhs,

009 lambda rather than bind

Video Link: C++ Weekly - Ep 15 Using std::bind, C++ Weekly - Ep 16 Avoiding std::bind Verification Case 示例如下,有add函数: 1 2 3 int add(int a, int b) { return a + b; } 现要通过其支持步进1(add(i, 1)),使用std

007 14s exchange

Video Link: C++ Weekly - Ep 14 Standard Library Gems: next and exchange Optimization Case https://gitee.com/harmonyos/OpenArkCompiler/blob/master/src/maple_ir/src/mir_lower.cpp 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 BlockNode *MIRLower::LowerBlock(BlockNode &block) { auto *newBlock = mirModule.CurFuncCodeMemPool()->New<BlockNode>(); BlockNode *tmp = nullptr; if (block.GetFirst() == nullptr) { return newBlock; } StmtNode *nextStmt = block.GetFirst(); ASSERT(nextStmt != nullptr, "nullptr check"); do { StmtNode *stmt = nextStmt; nextStmt = stmt->GetNext(); //

006 17s any

本文用于初步探索C++17引入的std::any的使用。 Verification Case 知识补充 c++是静态类型的语言,python是动态类型的语言。从个人经历而言,很

005 17s optional

本文用于初步探索C++17引入的std::optional的使用与性能。 Verification Case 知识补充 如下代码,或多或少还是会见到一些: 1 2 3 4 5 6 7 8 9 10 11