首页 > 解决方案 > `auto` 和 `std::any` 有什么区别?

问题描述

我最近遇到了这个std::any类,在 C++17 中引入,基于boost::any. 这个类可以“持有任何类型的实例”并auto自动推导出变量的数据类型。

那么主要区别是什么?优缺点都有什么?

标签: c++c++17autostdany

解决方案


std::any并且auto是完全不同的构造。


std::any是一种容器类型,可以容纳任何类型的对象:

std::any a = 42;        // a holds an int, but type is std::any
a = std::string{"hi"};  // ok, a holds a string now

所持有的对象的类型std::any可以在程序执行过程中改变。


auto是指定占位符类型的关键字。变量auto的类型是用于初始化变量的值的类型:

auto a = 42;            // a is int, for the entirety of the program
a = std::string{"hi"};  // error, a has type int

这种类型是静态确定的,即在编译时,并且在程序执行期间永远不会改变。


这些构造不可互换,因此它们具有不同的用例,您无法有意义地比较一种与另一种的优缺点。


推荐阅读