六一的部落格


关关难过关关过,前路漫漫亦灿灿。



  1. 获取表达式类型: 定义变量时用作变量类型

    1decltype(expr);
  2. 得到左值引用类型: 用来绑定给定类型对象

    1decltype((lvalue));

获取表达式类型


变量表达式的表达式类型为变量类型

类成员也是变量

1decltype(variable);

示例

1int a = 5, &r = a;
2decltype(a) b;       // 变量类型为int
3decltype(r) r2 = b;  // 变量类型为int &

函数表达式的表达式类型为函数返回类型

1decltype(expr);

函数返回类型非引用: 表达式值类别为纯右值

1#include <iostream>
2int fcn(int a) { return ++a; }
3int main()
4{
5    decltype(fcn(3)) b = 6; // 函数表达式类型为int
6    return 0;
7}

函数返回类型为右值引用: 表达式值类别为速亡值

1string &&fcn(string s);
2
3int main()
4{
5    decltype(fcn("hello")) s = "world"; // 函数表达式类型为右值引用
6    return 0;
7}

得到左值引用类型: 绑定给定类型对象

使用圆括号将一个左值括起来

1decltype((lvalue));

示例

1int a = 5;
2decltype((a)) b = a;       // a为左值, 得到左值引用,基本类型为int
3
4double d = 3.14;
5double &rd = d;
6decltype((++rd)) rd2 = d;  // 前置递增运算符返回左值, 得到左值引用,基本类型为double

类型指示符decltype


  1. 获取表达式类型: 定义变量时用作变量类型

    1decltype(expr);
  2. 得到左值引用类型: 用来绑定给定类型对象

    1decltype((lvalue));

获取表达式类型


变量表达式的表达式类型为变量类型

类成员也是变量

1decltype(variable);

示例

1int a = 5, &r = a;
2decltype(a) b;       // 变量类型为int
3decltype(r) r2 = b;  // 变量类型为int &

函数表达式的表达式类型为函数返回类型

1decltype(expr);

函数返回类型非引用: 表达式值类别为纯右值

1#include <iostream>
2int fcn(int a) { return ++a; }
3int main()
4{
5    decltype(fcn(3)) b = 6; // 函数表达式类型为int
6    return 0;
7}

函数返回类型为右值引用: 表达式值类别为速亡值

1string &&fcn(string s);
2
3int main()
4{
5    decltype(fcn("hello")) s = "world"; // 函数表达式类型为右值引用
6    return 0;
7}

得到左值引用类型: 绑定给定类型对象

使用圆括号将一个左值括起来

1decltype((lvalue));

示例

1int a = 5;
2decltype((a)) b = a;       // a为左值, 得到左值引用,基本类型为int
3
4double d = 3.14;
5double &rd = d;
6decltype((++rd)) rd2 = d;  // 前置递增运算符返回左值, 得到左值引用,基本类型为double