From 2ed385df51428b84b9ae8d5ae5b3d7e72685524f Mon Sep 17 00:00:00 2001 From: Estom Date: Sat, 7 Aug 2021 14:22:45 +0800 Subject: [PATCH] =?UTF-8?q?=E6=AF=8F=E5=A4=A9=E4=B8=80=E9=81=8D=EF=BC=8C?= =?UTF-8?q?=E5=8F=B3=E5=80=BC=E5=BC=95=E7=94=A8=E4=B8=8E=E5=AE=8C=E7=BE=8E?= =?UTF-8?q?=E8=BD=AC=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../1 模板与泛型编程.md} | 0 C++/高级特性/1 C++左值右值.md | 102 +++++++++++++- C++/高级特性/2 C++移动语义.md | 36 ++++- C++/高级特性/3 C++完美转发.md | 124 +++++++++++++++++- C++/高级特性/Modern C++.md | 2 + C++/高级特性/image/2021-08-07-13-48-45.png | Bin 0 -> 63743 bytes C++/高级特性/说明.md | 1 - 工作日志/小论文.md | 10 ++ 8 files changed, 268 insertions(+), 7 deletions(-) rename C++/{面向对象/6 模板与泛型编程.md => 模板编程/1 模板与泛型编程.md} (100%) create mode 100644 C++/高级特性/Modern C++.md create mode 100644 C++/高级特性/image/2021-08-07-13-48-45.png delete mode 100644 C++/高级特性/说明.md diff --git a/C++/面向对象/6 模板与泛型编程.md b/C++/模板编程/1 模板与泛型编程.md similarity index 100% rename from C++/面向对象/6 模板与泛型编程.md rename to C++/模板编程/1 模板与泛型编程.md diff --git a/C++/高级特性/1 C++左值右值.md b/C++/高级特性/1 C++左值右值.md index 5e9fccdd..621f4c78 100644 --- a/C++/高级特性/1 C++左值右值.md +++ b/C++/高级特性/1 C++左值右值.md @@ -2,10 +2,11 @@ > 参考文献 > * [cnblogs.com/sunchaothu/p/11343517.html](cnblogs.com/sunchaothu/p/11343517.html) +> * [https://www.zhihu.com/question/363686723/answer/1976488046](https://www.zhihu.com/question/363686723/answer/1976488046) > 为了导入右值和移动语义,首先复习了以下临时对象在函数返回值和传参数时构造了几次;然后对比介绍了左值和右值,以及右值引用的形式和含义。为移动语义和完美转发的介绍做铺垫。 -## 1 问题导入 +## 1 问题导入——参数与返回值的角度 C++11 引入了 std::move 语义、右值引用、移动构造和完美转发这些特性。 @@ -175,9 +176,104 @@ int && a = 10; ``` * 和常量左值引用不同的是,右值引用还可以对右值进行修改。例如: + ``` int && a = 10; a = 100; cout << a << endl; -```` -![](image/2021-07-21-11-45-51.png) \ No newline at end of file +``` +![](image/2021-07-21-11-45-51.png) + + +## 1 问题引入——函数重载的角度 + +右值引用(Rvalue Reference),与传统的左值引用(Lvalue Reference)相对,是绑定到右值的引用。int n; +``` +int & lref = n; +int && rref = 1; +``` +右值引用是 C++ 11 标准引入的语言特性,理解右值引用,对理解现代 C++ 语义至关重要。而这一概念又经常让人困惑,例如在下面的例子 “overload foo” 中,函数 foo 的调用会匹配哪一个重载?void +``` +foo(int &) { std::cout << "lvalue" << std::endl; } +void foo(int &&) { std::cout << "rvalue" << std::endl; } + +int main() { + int &&rref = 1; + foo(rref); // which overload will be seleted? +} +``` +答案是匹配 foo(int&),是不是和想象中的不太一样? + +## 2 值类型和值类别 + +### 值类型和值类别 +C++ 中的表达式有两个维度的属性:类型(type)和值类别(value category)。 + +* 类型这个概念就是我们熟知的类型,int, int *, int &, int && 都是类型;其中 int 称为基础类型(fundamental type),后三者称为复合类型(compound type)。 +* 值类别分为:左值(lvalue)、亡值(xvalue) 和 纯右值(prvalue),任一个表达式都可以唯一地归类到这三种值类别中的一个,这三种类别称为基础类别(primary category)。除了这三种基础类别外,还有两种混合类别(mixed category):泛左值(glvalue)和右值(rvalue),泛左值包括左值和亡值,右值包括亡值和纯右值。 + +* 纯右值 + * 字面量, + * this指针, + * lambda表达式所有内建数值运算表达式:a + b, a % b, a & b, a << b&a, 取址表达式... +* 亡值 + * 返回类型为对象的右值引用的函数调用或重载运算符表达式,如 std::move(x) + * 转换为对象的右值引用类型的转型表达式,如 static_cast(x)... +* 左值 + * 变量、函数、模板形参对象或数据成员的名字,如 std::cin + * 返回类型为左值引用的函数调用或重载运算符表达式,如 std::cout << 1 + * ++a/--a*ptr... +* 泛左值 + * 包括左值和亡值 + * 右值包括亡值和纯右值 + + +### 拥有身份与可以移动 + +概念 +* 拥有身份 (identity):可以确定表达式是否与另一表达式指代同一实体,例如通过比较它们所标识的对象或函数的(直接或间接获得的)地址; +* 可被移动:移动构造函数、移动赋值运算符或实现了移动语义的其他函数重载能够绑定于这个表达式。 + +对应 +* 拥有身份且不可被移动的表达式被称作左值 (lvalue)表达式; +* 拥有身份且可被移动的表达式被称作亡值 (xvalue)表达式; +* 不拥有身份且可被移动的表达式被称作纯右值 (prvalue)表达式; +* 不拥有身份且不可被移动的表达式无法使用。 +* 拥有身份的表达式被称作“泛左值 (glvalue) 表达式”。左值和亡值都是泛左值表达式。 +* 可被移动的表达式被称作“右值 (rvalue) 表达式”。纯右值和亡值都是右值表达式。 + +![](image/2021-08-07-13-48-45.png) + + +## 3 规则 + +### 右值引用的规则 + +* 右值引用同样引入了一条规则:**右值引用类型的变量**只能绑定到**右值表达式**。但奇怪的事情出现了,和左值引用表达式只能是左值不同,**右值引用类型的表达式**既可以是左值,也可以是右值(纯右值或亡值)。 + +``` +void foo(int &) { std::cout << "lvalue" << std::endl; } +void foo(int &&) { std::cout << "rvalue" << std::endl; } + +int main() { + int &&rref = 1; + foo(rref); // output: lvalue +} +``` +> More importantly, when a function has both rvalue reference and lvalue reference overloads, the rvalue reference overload binds to rvalues (including both prvalues and xvalues), while the lvalue reference overload binds to lvalues. + +变量 rref 其实是一个左值,它的类型是 int 的右值引用 (int&&),它绑定到一个右值(字面量1),但它本身是一个左值。一方面因为右值没有名字。另一方面,因为右值引用(值类型)是左值(值类别)并不冲突。 + + + + + + + + + + + + + + diff --git a/C++/高级特性/2 C++移动语义.md b/C++/高级特性/2 C++移动语义.md index 3bd708d1..9af03253 100644 --- a/C++/高级特性/2 C++移动语义.md +++ b/C++/高级特性/2 C++移动语义.md @@ -102,7 +102,7 @@ class A destruct! -## 2 std::move() +## 3 std::move() * std::move(lvalue) 的作用就是把一个左值转换为右值。关于左右值的含义我们上一篇博客C++11的右值引用进行过阐述。 @@ -154,6 +154,7 @@ void swap_A(A &a1, A &a2){ 说到了 swap, 那就不得不说一下啊 move-and-swap 技术了 ## 5 Move and swap 技巧 + 看下面一段代码,实现了一个 unique_ptr ,和标准的std::unqiue_ptr的含义一致,智能指针的一种。 ```C++ template @@ -218,3 +219,36 @@ public: ,(事实上仅限右值可以传进来了)。然后 std::swap 负责把原先的资源和source 进行交换,完成了移动赋值。这样写节省了很多代码,很优雅。 +## 1 移动语义的应用 + + +右值引用的出现弥补了 C++ 在移动语义上的缺失。在右值引用出现之前,我们在函数调用传参时,只有两种语义:给它一份拷贝(按值传递),或者给它一份引用(按引用传递)。void inc_by_value(int i) { ++i; } + +``` +void inc_by_ref(int &i) { ++i; } + +int main() { + int i = 0; + inc_by_value(i); + inc_by_ref(i); + std::cout << i << std::endl; // output: 1 +} +``` +在上面的这个场景中,语义的缺失并不明显,但当我们处理持有资源的对象时,就不是那么和谐了: + +``` +class Socket { + public: + void take(Socket other) { sockfd_ = other.sockfd_; } + void take(Socket &other) { + sockfd_ = other.sockfd_; + other.sockfd_ = 0; + } + + private: + int sockfd_; +}; +``` +* 成员函数take的作用是接管外部传入的套接字,当我们使用拷贝语义时,会使得两个 Socket 对象同时持有同一份资源,可能导致资源的重用;而当使用引用的语义时,我们修改了原对象使其不可用,但并没有将这一点明确告知原对象的使用者,这可能导致资源的误用。 +* 在语法上支持移动语义,除了明确告知调用者语义之外,对自动化排错也是有积极意义的,编译器或者其他代码检查工具,可能可以通过语义分析排查亡值对象的错用。 +* “return value optimization” 和“copy elision”。所以,我认为代码中使用右值引用最重要的目的还是其语义,与优化没多大关系。原来就会优化这个东西 \ No newline at end of file diff --git a/C++/高级特性/3 C++完美转发.md b/C++/高级特性/3 C++完美转发.md index a35cec51..c60957c3 100644 --- a/C++/高级特性/3 C++完美转发.md +++ b/C++/高级特性/3 C++完美转发.md @@ -81,7 +81,7 @@ void function(T&& t) { ### 引用折叠规则 * 此模板函数的参数 t 既可以接收左值,也可以接收右值。但仅仅使用右值引用作为函数模板的参数是远远不够的,还有一个问题继续解决,即如果调用 function() 函数时为其传递一个左值引用或者右值引用的实参。 -* C++ 11标准为了更好地实现完美转发,特意为其指定了新的类型匹配规则,又称为引用折叠规则(假设用 A 表示实际传递参数的类型): +* C++ 11标准为了更好地实现完美转发,特意为其指定了新的类型匹配规则,又称为引用**折叠规则**(假设用 A 表示实际传递参数的类型): * 当实参为左值或者左值引用(A&)时,函数模板中 T&& 将转变为 A&(A& && = A&); * 当实参为右值或者右值引用(A&&)时,函数模板中 T&& 将转变为 A&&(A&& && = A&&)。 @@ -123,4 +123,124 @@ int main() // lvalue ``` -* 总的来说,在定义模板函数时,我们采用右值引用的语法格式定义参数类型,由此该函数既可以接收外界传入的左值,也可以接收右值;其次,还需要使用 C++11 标准库提供的 forword() 模板函数修饰被调用函数中需要维持左、右值属性的参数。由此即可轻松实现函数模板中参数的完美转发。 \ No newline at end of file +* 总的来说,在定义模板函数时,我们采用右值引用的语法格式定义参数类型,由此该函数既可以接收外界传入的左值,也可以接收右值;其次,还需要使用 C++11 标准库提供的 forword() 模板函数修饰被调用函数中需要维持左、右值属性的参数。由此即可轻松实现函数模板中参数的完美转发。 + + +## 1 问题定义 + +* 完美转发就是将函数实参以其原本的值类别转发出去。**转发值类别** +``` +void foo(int &) { std::cout << "lvalue" << std::endl; } +void foo(int &&) { std::cout << "rvalue" << std::endl; } +template void bar(/*T*/ x) { /*call foo with x*/ } + +int main() { + int i; + bar(i); // expecting output: lvalue + bar(1); // expecting output: rvalue +} +``` +* 在这里,变量 i 经历了两次转发,所以我们需要先后解决这两次转发的值类别问题。 + * 用户调用 bar 时,参数的值类别问题当用户以左值表达式调用 bar 时,确保其实例化(Instantiation)的形参类型为左值引用当 + * 用户以右值表达式调用 bar 时,确保其实例化的形参类型为右值引用。 +* bar 调用 foo 时,参数的值类别问题 + * 当 bar 的形参类型为左值引用时,将其以左值转发给 foo + * 当 bar 的形参类型为右值引用时,将其以右值转发给 foo + +> C++ 通过转发引用来解决第一个匹配,通过 std::forward 来解决第二个匹配。 +## 2 转发引用 + +### 原理 +* 转发引用基于一个叫做引用坍缩(Reference Collapsing)的原理: + +> rvalue reference to rvalue reference collapses to rvalue reference, all other combinations form lvalue reference.typedef int& lref; + +``` +typedef int&& rref; +int n; +lref& r1 = n; // type of r1 is int& , int& + & => int & +lref&& r2 = n; // type of r2 is int& , int& + && => int & +rref& r3 = n; // type of r3 is int& , int&& + & => int & +rref&& r4 = 1; // type of r4 is int&&, int&& + && => int && +``` + +### 举例说明 + +```C++ +void foo(int &) { std::cout << "lvalue" << std::endl; } +void foo(int &&) { std::cout << "rvalue" << std::endl; } +template int bar(T &&x); // x is a forwarding reference + +int main() { + int i = 1; + int &lref = i; + int &&rref = 1; + + bar(1); // T 为 int, decltype(x) 为 int&& + bar(i); // T 为 int&, decltype(x) 为 int& + bar(lref); // T 为 int&, decltype(x) 为 int& + bar(rref); // T 为 int&, decltype(x) 为 int& + bar(std::move(rref)); // T 为 int, decltype(x) 为 int&& + bar(1); // T 为 int&&, decltype(x) 为 int&& +} +``` +### 第一步转发问题解决 + +* 解决了调用 bar 时参数值类别的问题,现在我们将 bar 的参数传递给 +```C++ +foo:void foo(int &) { std::cout << "lvalue" << std::endl; } +void foo(int &&) { std::cout << "rvalue" << std::endl; } +template int bar(T &&x) { foo(x); } +``` +## 3 forward转发 +### forward原理 +* std::forward 的实现如下: +```C++ +template +constexpr _Tp&& +forward(typename std::remove_reference<_Tp>::type& __t) noexcept +{ return static_cast<_Tp&&>(__t); } + +template +constexpr _Tp&& +forward(typename std::remove_reference<_Tp>::type&& __t) noexcept +{ + static_assert(!std::is_lvalue_reference<_Tp>::value, "template argument" + " substituting _Tp is an lvalue reference type"); + return static_cast<_Tp&&>(__t); +} +``` +* 实现了将左值转发为左值或右值,将右值转发为右值。 + + +### 举例说明 + +```C++ +void foo(const int &) { std::cout << "lvalue" << std::endl; } +void foo(const int &&) { std::cout << "rvalue" << std::endl; } + +int main() { + int i = 1; + foo(std::forward(i)); // output: rvalue; forward lvalue -> rvalue + foo(std::forward(i)); // output: lvalue; forward lvalue -> lvalue + foo(std::forward(i)); // output: rvalue; forward lvalue -> rvalue + foo(std::forward(1)); // output: rvalue; forward rvalue -> rvalue + foo(std::forward(1)); // error: static_assert failed due to requirement '!is_lvalue_reference::value' "can not forward an rvalue as an lvalue" + foo(std::forward(1)); // output: rvalue; forward rvalue -> rvalue +} +``` +### 第二步转发的实现 + +``` +void foo(int &) { std::cout << "lvalue" << std::endl; } +void foo(int &&) { std::cout << "rvalue" << std::endl; } +template int bar(T &&x) { foo(std::forward(x)); } + +int main() { + int i = 1; + bar(i); // output: lvalue + bar(1); // output: rvalue +} +``` + +* 我们总结一下。完美转发问题是将函数的参数以其原本值类别转发出去的问题。转发引用 和 std::forward 共同解决了完美转发问题。其中,转发引用将函数的左值实参推导为左值引用类型,右值实参推导为右值引用类型。std::forward 将左值引用类型的实参转发为左值,将右值引用类型的实参转发为右值。 diff --git a/C++/高级特性/Modern C++.md b/C++/高级特性/Modern C++.md new file mode 100644 index 00000000..276138e8 --- /dev/null +++ b/C++/高级特性/Modern C++.md @@ -0,0 +1,2 @@ +> 主要用来记录 effectiveC++ 和more effective c++中涉及到的基础知识和高级特性。 +> 还有modern C++中的内容。主要包括C++11 17 20中新添加的特性。 \ No newline at end of file diff --git a/C++/高级特性/image/2021-08-07-13-48-45.png b/C++/高级特性/image/2021-08-07-13-48-45.png new file mode 100644 index 0000000000000000000000000000000000000000..2213635eaa380d5dc9c5c0222dfafc2f7acf1581 GIT binary patch literal 63743 zcmdqIWmlX{(*=sV2X}XOcXtTx1b3I<4#C}haCZp7CAho0Lx92k%>BIQ{E1U*&6;&x zA9{Max@+&+RsBmoCyvB^oG@Lgbnls?xrpy4pui! zcm{favJz7g0|RSJKzuia20g<&%j&v;fuRik_W>VqsxSuwdrp;;6w~lFx-^6h!jxLB zQ|4&?bC|1!DW%E^9t~kBYIcJRgKZ}dQ&2HfO-)mbiPE$MU z|7;P=dSH3>KdS(r4XZ8s&(t6b;q@i{GXRX}x3-A?Od2_e+W!BB!3R@X#s8mif&Kq< zz`xSLtS4H$qo(1bSmau;(|Cs@jFCrXRg`tuzxnahr+{fTnCx17`wa4Zz!&<3J96!i z_Y$lLjPw-IxPb`th-!3fxo;bH07?pl1JKBly$T{BW=Pp zcvwvFk=9GrWlBcP(2T1AJR$eN_)Ki{@O1v_z)9)JQd9M)V?zJ7_z}j6gE@D!PB#iJ zHz9BU)U?6mYzePz3`i;uEq0F8fhQAI2^S;#RW?p193798+5t1oBI-IFcHCq@fMx|& zb!;jCpOh;zEgsIOo)^rnSfE0agkHjrD?xfazUrqc&??MiE($}=HkyGX&ZyjoHY==( zf?*>Sn1l==ElR8hkoLe>gH%T)wK8!zqNPYS71MlKq?NRGC~hPsi>8srx(d;7`Dw32 zA1lws!mbKer|xX#M#)0wIfvJwCwG)tAQ1x;7v9=r%Sf_3Mfxal|Pk+|ThMNr6OANLTI zTQg>88uTe|-XkxeIQ?U~lIGnCOWG$!^BbcPLMRUUFUk}|QaMGVF~-;lwjX2^v7@7> z(&&eWf`0L{4V7q1edS;fIRv5P?$UHHQ5J(-(rjuNn&IjVU%z3Z_uFhRDOoq!_aV^3 zC85Rr%P?_RTV|3({NgB}<9mKy&k!8cAO+$}FCColZ zRRB@xWFBF%WmX9Fm}u%nR&*%rmPe@!3JTNXO{$)nL4w7TqiTjFhx_bFu3;)O$ZCn4 zH6<>Z>hfA(P$dJ;Wi8JbyA>u#gc{rwDAt&Sth2aA$%#i)K`1|yaK_-?T!=Anl8bpU zfKj$OsvfI$8Ns@hM5!=CCd5)L#%~VM1%29mz!0^SwOfrI^jp zvS+p|pnwEgx(BX}_|Q>0+_XbYP`@p1DH510Lxw^#q~zD=%ixUHn)E}xr!QTUldYyB zWa}7XiBV2cqHsrM;vl1T?Jb6%6~}^UabRNO1WRba2^%SkQbGP0(mXaM zqZSUENXS@_N;HSr-*e@=T}g-Cyeat9V9Mke$D5#H8xahiBD6aKicqJj??tB)ASTq zGK)9N$qk)8shVse8o~6LHdA3hP8H!E-eCl9wXOdPDWmCw)HI9rKx`a~Fdcsv(6K6P zZ@f?h&={X8{%MMa>q#yj^q_2q#EHm{i#6sGGNa_QJl|SaiBYZ=6lDI)jQ1N355|1P z0$wU8i!-@YrF0^)uu>(nlRgEH28Sxls?Im8+elCVE+A|NTvon6nPK>W; z74F_Tf<7Fo5YuE0ea>UqL9}08XH5!gP-AMBBi27a;6%XD>4z3pG>0FWH9z#8JXRGGQh9d>Qo*SSpHJdP$PkQOD^`TZq{lWj4fR~5D zCz}PYsm6BR58JlkhT5uWmBv`?AlK=JTTwG(5Dycyi>$eccJ6vELqZdiT>E-IIcw-( z{evPL8cJDSi>nSs86UQAxUpU>v(O`3E`keg5rMQqzLYEx%`ggb**+1S`XJHl)Cg58 zi<>rm@&^u|1eaG^HuuX2Rj-rp^WJ!?M(6tm?7!2-r~E22nlyUq-@~r6Q;C53c!}KP zdvj@wVk^bBOM->Qjfb-==`NK`;wkDlh;V8U)eBmWx2r^)?E)qX{H*>Q{fF*0mS<}mF0Y9@*|tu<2E#! z?o-yV?)4>3Gc$;fx=q+Ktok(r>bigvktA=x-x=yDmZS=5GY-?8SJ;~6d%oI+AA`P5 zB)*r8(sx>cyvhj+Ga>1W1*|Uz8OBv9b+UR!>%c)6oecHY-$hF-tZy*-w$Rg=Fp>>_!a4kw6?UGOmjUUgmP(C9G1Z z_-`-@LiI)?wb41PnL>U#K64No5d-eu+VZAeBh(H{8Sp7XfLXmlfft52sD!+3&7L`z zi)NoIBB}35N^MIi~bkj5*vV ze^5o3Z^t!GEgTrs49efgWU3Lo&VxRu2$mUyPZ%}Tp{BJeF-NnBZ?VdbKYW{REZ)As z>IGx7nl~_^aWB$t@v!-Ed93nm@0Z43tVfK$64xL4=`1T3Zt}Sq_nf6GIO4O{THGo5 zT&wf%6Sy5u7O4m}pY-_R6nN)m_uk|M@G!q$wQoJH);hZEH$RDF>STZRnht8XunRc= zc}TkSY2b(!^zdP*JkA{gZ^-B`l!@KHZxw4a$4sly>0@Cr(2TYH* zHifOY?&&rgo%#y6G;JNJqu;BT5Ar1KM&M3IwpdNs4)}^WF=qc8$G{f5KgDC1sOY{H zxbv?(AHvg1^It8?c2bF5R0uvaa=N|`N>Tt}O1>axk#e&$W1MWn)Rj()lcTQtoyGo; z0IKj|aeYL!*3>EWL=9fzUndxpb=#cU3zDCQD=LEBa!v7u`8GZ`!RL|JPQ4GkI6GfK z>t@D2@=Pge%wf4s0W>Z(Wj&vNdFs0x-S1aB;mbeEu8!CDmSKrDzs*~hK9ecL4TOOX zJu>W^m)}lS{#~(*b0#6(G7T4OP;=3z^r!pv+{k*5$K%^|xJ4jt9=GUu zq7QOi?~~Y)!$>qvzW>Mch9C#;=U;*v$j_qa=nA@CWvv*TI~1OF41{(~M9uQ)_7$U@ zI=K|=^8EL$g_)Aj!lz-J%1$bqL1i)=LN3Em{`H%cT*K8}?dvlXqk? zAQ>!|dO!OLqP;-FQkJ&i*5PT&(xMFyiF==gG4gjNeKF}zuUWEX6~G0f0WRg$*~5jA z+e%*5#^Vu7*Yl&{Q#!%1OZ!&t`$z!2ZgEp^Hn$v;UPY5m?E3vD_-K!mTbd#=fxFos zYNd@l*Y(kI;+*Qm&o8e^SM`>}C0fh zp(0;agX4T$bbePR_TCqHBk}V4N>S-KP5s`3CyYc7d}^BKkISh@_MuNhXvS)3fIHJI zd=3yK>*Ox}XP^oI3+_K6`zxO!nVFuA1{sZvA)j}*kNCyoetLA>)jScu6_Yd)DvF

?y)T-k4w#`q_ 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≻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 Y62}>87C%3}hXJ0C60+iDqI!P+AK4>lq5uE@ literal 0 HcmV?d00001 diff --git a/C++/高级特性/说明.md b/C++/高级特性/说明.md deleted file mode 100644 index e35df5e7..00000000 --- a/C++/高级特性/说明.md +++ /dev/null @@ -1 +0,0 @@ -> 主要用来记录 effectiveC++ 和more effective c++中涉及到的基础知识和高级特性。 \ No newline at end of file diff --git a/工作日志/小论文.md b/工作日志/小论文.md index 11ca15a3..0e3ec592 100644 --- a/工作日志/小论文.md +++ b/工作日志/小论文.md @@ -1,9 +1,19 @@ ## Introduction ### Background +* 恶意软件 +* 恶意软件检测的主要方法 +* 恶意软件检测的主要问题(隐私问题) ### Problems +* 联邦学习应用的问题(非独立同分布) +* 什么是非独立同分布 +* 非独立同分布的数学表示方法 +* 非独立同分布对机器学习和联邦学习产生的影响,以及数学上的证明。 + + + ### Contributions > what we do to achieve aims. * fedRed算法