Fix some typos

This commit is contained in:
Fang 2020-01-03 17:58:58 -05:00 committed by GitHub
parent a7457147a6
commit da0f94a720
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -979,7 +979,7 @@ void foo()
template <typename T> class AddFloatOrMulInt; template <typename T> class AddFloatOrMulInt;
// 但是这个类是给T是Int的时候用的于是我们写作 // 但是这个类是给T是Int的时候用的于是我们写作
class AddFloatOrMulInt<int> class AddFloatOrMulInt<int>;
// 当然,这里编译是通不过的。 // 当然,这里编译是通不过的。
// 但是它又不是个普通类,而是类模板的一个特化(特例)。 // 但是它又不是个普通类,而是类模板的一个特化(特例)。
@ -992,7 +992,7 @@ template </* 这里要填什么? */> class AddFloatOrMulInt<int>;
template <> class AddFloatOrMulInt<int> template <> class AddFloatOrMulInt<int>
{ {
// ... 针对Int的实现 ... // ... 针对Int的实现 ...
} };
// Bingo! // Bingo!
``` ```
@ -1222,7 +1222,7 @@ template <typename T>
class RemovePointer class RemovePointer
{ {
public: public:
typedef T Resylt; // 如果放进来的不是一个指针,那么它就是我们要的结果。 typedef T Result; // 如果放进来的不是一个指针,那么它就是我们要的结果。
}; };
template <typename T> template <typename T>
@ -1475,7 +1475,7 @@ X<float> xf;
此时如果X中有一些与模板参数无关的错误如果名称查找/语义分析在两个阶段完成,那么这些错误会很早、且唯一的被提示出来;但是如果一切都在实例化时处理,那么可能会导致不同的实例化过程提示同样的错误。而模板在运用过程中,往往会产生很多实例,此时便会大量报告同样的错误。 此时如果X中有一些与模板参数无关的错误如果名称查找/语义分析在两个阶段完成,那么这些错误会很早、且唯一的被提示出来;但是如果一切都在实例化时处理,那么可能会导致不同的实例化过程提示同样的错误。而模板在运用过程中,往往会产生很多实例,此时便会大量报告同样的错误。
当然MSVC并不会真的这么做。根据推测最终他们是合并了相同的错误。因为即便对于模板参数相关的编译错误也只能看到最后一次实例化的错误信息 当然MSVC并不会真的这么做。根据推测最终他们是合并了相同的错误。因为即便对于模板参数相关的编译错误也只能看到最后一次实例化的错误信息
``` ```C++
template <typename T> struct X {}; template <typename T> struct X {};
template <typename T> struct Y template <typename T> struct Y
@ -2565,7 +2565,7 @@ void foo(
从上面这些例子可以看到SFINAE最主要的作用是保证编译器在泛型函数、偏特化、及一般重载函数中遴选函数原型的候选列表时不被打断。除此之外它还有一个很重要的元编程作用就是实现部分的编译期自省和反射。 从上面这些例子可以看到SFINAE最主要的作用是保证编译器在泛型函数、偏特化、及一般重载函数中遴选函数原型的候选列表时不被打断。除此之外它还有一个很重要的元编程作用就是实现部分的编译期自省和反射。
虽然它写起来并不直观但是对于既没有编译器自省、也没有Concept的C++1y来说,已经是最好的选择了。 虽然它写起来并不直观但是对于既没有编译器自省、也没有Concept的C++11来说,已经是最好的选择了。
补充例子构造函数上的enable_if 补充例子构造函数上的enable_if