C 允许编译器从函数参数推断模板参数,从而实现简洁且类型安全的代码。但是,此功能不适用于类构造函数。为什么会出现这种情况?
在示例代码中,编译器无法推断 Variable 的模板参数,因为构造函数不是该类的唯一入口点。复制构造函数和赋值运算符提供了创建和修改对象的替代方法。
考虑以下场景:
MyClass m(string s); MyClass *pm; *pm = m;
在这种情况下,编译器将不知道需要什么模板类型我的班级下午。虽然可以从传递给构造函数的参数推断类型,但当涉及赋值时,它会变得不确定,从而很难确定预期类型。
此外,可能存在不希望进行类型推断的情况。例如,一个类可能具有出于不同目的接受不同类型的构造函数。推断模板类型可能会对类接口施加意想不到的约束。
值得注意的是,C 17 预计会从构造函数参数引入类型推导。这将启用以下语法:
std::pair p(2, 4.5); std::tuple t(4, 3, 2.5);
但是,重要的是要记住类型推断是一个方便的功能,并且可能并不总是合适。了解其局限性背后的原因有助于开发人员编写健壮且可维护的 C 代码。
以上是为什么 C 模板参数推断不能与构造函数一起使用(直到 C 17)?的详细内容。更多信息请关注PHP中文网其他相关文章!