From aaaa906415fb70ef6b48e4c2ba2801601574b800 Mon Sep 17 00:00:00 2001 From: Menghui Xie Date: Wed, 20 Jun 2018 17:54:22 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=20decltype=E3=80=81=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E5=BC=95=E7=94=A8=E6=8A=98=E5=8F=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 35 +++++++++++++++++++++++++++++++---- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 891be10..acc28ab 100644 --- a/README.md +++ b/README.md @@ -216,9 +216,7 @@ int main() ### assert() -断言,是宏,而非函数。assert 宏的原型定义在``(C)、``(C++)中,其作用是如果它的条件返回错误,则终止程序执行。 - -如 +断言,是宏,而非函数。assert 宏的原型定义在``(C)、``(C++)中,其作用是如果它的条件返回错误,则终止程序执行。如: ```cpp assert( p != NULL ); @@ -588,6 +586,35 @@ enum color { red, yellow, green }; enum { floatPrec = 6, doublePrec = 10 }; ``` +### decltype + +decltype 关键字用于检查实体的声明类型或表达式的类型及值分类。语法: + +```cpp +decltype ( expression ) +``` + +
decltype 使用 + +```cpp +// 尾置返回允许我们在参数列表之后声明返回类型 +template +auto fcn(It beg, It end) -> decltype(*beg) +{ + // 处理序列 + return *beg; // 返回序列中一个元素的引用 +} +// 为了使用模板参数成员,必须用 typename +template +auto fcn2(It beg, It end) -> typename remove_reference::type +{ + // 处理序列 + return *beg; // 返回序列中一个元素的拷贝 +} +``` + +
+ ### 引用 #### 左值引用 @@ -606,7 +633,7 @@ enum { floatPrec = 6, doublePrec = 10 }; #### 引用折叠 * `X& &`、`X& &&`、`X&& &` 可折叠成 `X&` -* `X&& &&` 可折叠成 `X&` +* `X&& &&` 可折叠成 `X&&` ### 宏