为什么本示例中的'initializer_list”模板类型推导失败?
使用initializer_list进行模板类型推导
考虑以下函数:
template<typename T> void printme(T&& t) { for (auto i : t) std::cout << i; }
登录后复制
上述函数需要一个参数具有 begin() 和 end() 成员函数。有多种方法可以使用不同的数据类型调用此函数。例如,我们可以使用 std::vector、std::string、std::array 甚至初始化列表。然而,有一种特殊情况是非法的:
printme({'a', 'b', 'c'});
登录后复制
这行代码将导致编译时错误。为什么会出现这种情况?
模板参数推导失败
只有函数参数类型与提供的参数类型匹配时,模板参数的类型推导才能成功。对于 printme 函数:
- std::vector、std::string 和 std::array 参数都具有与函数的参数类型相对应的明确定义的类型(例如, std::vector
)。 - 初始化列表参数 ({'a', 'b', 'c'}) 没有明确定义的类型。它是一个与特定类型无关的临时对象。
因此,在初始化列表参数的情况下,编译器无法推导模板参数 T。显式指定模板参数将解决该问题(例如 printme
auto 的特殊情况
虽然 printme 函数中的初始化列表参数是非法的,但它是有效的使用 auto 来初始化保存初始化列表的变量。这是因为 auto 会将 il 的类型推导为 std::initializer_list
以上是为什么本示例中的'initializer_list”模板类型推导失败?的详细内容。更多信息请关注PHP中文网其他相关文章!
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前
By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
击败分裂小说需要多长时间?
3 周前
By DDD
R.E.P.O.保存文件位置:在哪里以及如何保护它?
3 周前
By DDD

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)