为了账号安全,请及时绑定邮箱和手机立即绑定

为什么指针衰减优先于推导的模板?

为什么指针衰减优先于推导的模板?

ABOUTYOU 2019-09-24 16:34:21
假设我正在编写一个函数来打印字符串的长度:template <size_t N>void foo(const char (&s)[N]) {    std::cout << "array, size=" << N-1 << std::endl;}foo("hello") // prints array, size=5现在,我想扩展foo以支持非数组:void foo(const char* s) {    std::cout << "raw, size=" << strlen(s) << std::endl;}但是事实证明,这破坏了我最初的预期用法:foo("hello") // now prints raw, size=5为什么?不需要模板到指针的转换,而模板是完全匹配的吗?有没有办法确保我的数组函数被调用?
查看完整描述

3 回答

?
侃侃无极

TA贡献2051条经验 获得超10个赞

*被调用的转换构造函数是用户定义的转换序列的一部分。用户定义的转换序列由用户定义的转换(ctor调用)加上初始标准覆盖序列(数组到指针)加上最终的标准转换序列(此处为Identity)组成。当然不是序列本身。

查看完整回答
反对 回复 2019-09-24
  • 3 回答
  • 0 关注
  • 473 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信