现代C++ 类型推导

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了现代C++ 类型推导相关的知识,希望对你有一定的参考价值。

参考技术A C++类型推导,通常使用的是auto、decltype关键字来进行类型推导的,从而简化代码,方便编程,但是在获取方便的同时,我们需要对这些关键字有一些深入的了解。

一、获取函数的签名

__FUNCSIG__是MSVC下获取函数签名的宏,__PRETTY_FUNCTION__是GCC下获取函数签名的宏。

使用一个例子来测试获取函数的签名

二、类型推导 - auto、decltype

1、构建一个int类型,一个const int类型,一个int&类型,一个const int& 类型。

为什么会出现const int& is reference,not const这种结果呢?

我通过查找资料,明白了为什么会出现这种现象,原因如下:

引用的const 限定符仅仅意味着不能通过引用参数修改值,但是它仍然可以被其他方法修改。

例子如下:

所以我们不能假设const引用的值实际上是常数。

2、我们使用auto来推导上述类型

decltype(i) k = 10; decltype(i) 推导i的类型,从上面的代码所知,i的类型为int,所以decltype(i)推导出i的类型为int,即上述代码为 int k = 10;

3、我们使用decltype(auto)来推导上述类型

为什么使用auto推断类型和使用decltype(auto)推断类型会有不同的结果,通过查阅资料发现auto与decltype(auto)是有一定的区别于联系的。

auto在表示类型时不会附带等号右侧类型的 ‘ & ’、‘ * ’ 以及顶层const,而decltype会附带表达式的 ‘ & ’、‘ * ’ 以及顶层const;

auto在遇到数组时,编译器会将其替换为一个指向数组首元素的指针,但是decltype不会;

以上是我对C++类型推导的一些理解,欢迎大家评论。

以上是关于现代C++ 类型推导的主要内容,如果未能解决你的问题,请参考以下文章

现代C++笔记

C++ 混合强类型基类与 CRTP 和返回值类型推导

C++学习笔记——auto/decltype 自动推导类型

C++学习笔记——auto/decltype 自动推导类型

C++学习笔记——auto/decltype 自动推导类型

C++学习笔记——auto/decltype 自动推导类型