decltype : 获取表达式的类型。在编译时推导出一个表达式的类型,并且不会计算表达式的值
使用方式: decltype(expression)
例如:
1 | int x = 0; |
auto与decltype类似但是又不同,auto只能根据变量的初始化表达式推导出变量应该具有的类型。decltype将精确的推导出表达式定义的类型,不会舍弃和弃用cv限定符。
decltype(exp)推导规则:
- exp 是标识、类访问表达式,decltype(exp) 和exp的类型一致
例如:
1 | class Foo{ |
exp是函数调用,decltype(exp)和返回值的类型一致
其他情况,如果exp是一个左值,则decltype(exp)是exp类型的左值引用,否则和exp类型一致
例如:
1 | int int_func(); |
返回类型的后置语法使用 auto 和decltype
例如:
1 | int& foo(int& i); |