模板函数的默认类型假设
Default type assumption by a template function
示例:假设f
是一个模板函数,有两个参数:
f (1, 2)
在这个调用中,模板函数是否假设它的参数是int
,或short
,或其他任何东西?
template <typename dataTypeA, typename dataTypeB> dataTypeB functionX (dataTypeA argA, dataTypeB argB)
模板没有假设任何东西。字面值的类型为int
,这将是编译器推断的类型。
正如@David已经说过的,就你的问题而言,没有"做出假设"这样的事情。字面量只是具有类型,这些类型是函数模板可以用于类型推断的类型。不过请记住,转换是模板匹配的一部分!
那么,假设你有这个函数模板:
template <typename T> void foo(T x, T y);
如果你调用foo(1, 2)
,它将被T = int
调用。
如果输入foo(1u, 2u)
,则推导结果为T = unsigned int
。
如果你说任何像foo(1u, 2)
这样的混合,没有首选匹配,编译器会报告错误。
由于C或c++中没有short
字面量,如果你想显式地调用foo<short>
函数,你可以这样说,或者创建临时的显式short
参数:
foo<short int>(3, 4);
foo<short int>(3u, 4l); // also OK because of conversion
foo(short(3), short(4)); // deduction
更新:根据您的编辑,请注意,由于您只匹配每个模板形参的一个参数,因此您不会遇到歧义匹配的问题。
相关文章:
- ArduinoJson 6.15.2:JsonObject没有命名类型
- 防止主数据类型C++的隐式转换
- 大量序列中核苷酸类型的快速计数
- 如何从C++中的依赖类型中获得它所依赖的类型
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 是否可以初始化不可复制类型的成员变量(或基类)
- 如何获取std::result_of函数的返回类型
- 从父命名空间重载类型
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- Openssl 1.1.1d无效使用不完整的类型"struct dsa_st"
- 访问者访问变体并返回不同类型时出错
- 假设相同的 lambda 表达式具有不同的类型是否安全?
- 错误C4430:丢失类型指定词 - 假设INT.注意:C 不支持对我的构造函数的默认设置
- C4430缺少类型的指定词 - 假设INT
- C - Visual Studio-缺少类型的指定词 - 假设INT
- 为什么我假设"string"不是本机 c++ 数据类型
- C++ - 你能假设类型* = std::array:<type>:iterator吗?
- 如何在编译时确认自动推断类型的假设?(即static_assert样式
- 模板函数的默认类型假设