首页 > 后端开发 > C++ > 与函数不同,为什么不能从类构造函数推断 C 模板参数?

与函数不同,为什么不能从类构造函数推断 C 模板参数?

Patricia Arquette
发布: 2024-12-03 15:13:13
原创
637 人浏览过

Why Can't C   Template Parameters Be Inferred from Class Constructors, Unlike Functions?

为什么不能从类构造函数推断出模板参数?

在 C 中,可以从函数参数推断出模板参数,可以方便地进行类型推导。但是,这种推断不会扩展到类构造函数。

原因:
类构造函数缺乏推断源于这样一个事实:构造函数不是构造函数的唯一入口点。班级。复制构造函数和赋值运算符也可以在没有有关模板参数的显式信息的情况下操作对象。

考虑以下示例:

MyClass m(string s);
MyClass *pm;
*pm = m;
登录后复制

在这种情况下,编译器很难确定pm 的模板参数,因为 m 和 pm 都缺少此信息。因此,允许类构造函数的推理会带来不确定性和语法困难。

C 17 中的异常:
在 C 17 中,引入了此规则的例外。对于某些类型,例如 std::pair 和 std::tuple,可以从构造函数参数推断模板参数。

当不需要推断时:
在某些情况下,推断来自构造函数的模板参数可能并不理想。考虑一个使用默认模板参数的类,构造函数可能不会覆盖该参数。如果允许推断,则可能会覆盖默认值并导致意外行为。

因此,虽然函数参数的模板参数推断可以增强代码简洁性,但类构造函数不进行此类推断可以确保清晰度并防止潜在的潜在问题类使用中的歧义。

以上是与函数不同,为什么不能从类构造函数推断 C 模板参数?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板