c++ - `auto` 和 `std::any` 有什么区别?
问题描述
我最近遇到了这个std::any
类,在 C++17 中引入,基于boost::any
. 这个类可以“持有任何类型的实例”并auto
自动推导出变量的数据类型。
那么主要区别是什么?优缺点都有什么?
解决方案
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
这种类型是静态确定的,即在编译时,并且在程序执行期间永远不会改变。
这些构造不可互换,因此它们具有不同的用例,您无法有意义地比较一种与另一种的优缺点。
推荐阅读
- sql - 命令执行异常:INSERT 语句与 FOREIGN KEY 约束冲突
- c# - TextureBrush 低质量打印
- java - 如何使用流口水的决策表(.xls)比较两个或多个条件?
- google-maps - 谷歌地图地理编码API免费每日限制一击即过,是因为我没有启用计费吗?
- php - Laravel 从数据库中查找数据,直到那为空或重试完成
- python - 带有 python-telegram-bot 库的 Telegram 机器人
- json - 第一次使用 json 时,Kendo 电子表格没有绑定
- c# - 获取当前节点 simpleType
- html - 使用 Bootstrap Angular6 数据表为 tfooter 设置分页样式
- c++ - wordDiff 必须返回字符串数组,其中单词在 s 中但不在 t 中,按照它们出现在 s 中的顺序