c++ - 关于C++模板的问题

标签 c++ templates

假设如下模板定义(代码无意义):

template<class X, class Y>
bool FooBar(const Y& val) { return sizeof(X) + 4; }

我发现下面的调用代码是合法的:

float temp = 0.f;
FooBar<int>(temp);

可以看到,第二个类型参数Y可以省略。编译器通过查看 temp 的参数类型推断出 Y 的类型。

C++ 模板的什么规则或规范允许这样做?看到它我感到非常惊讶。

最佳答案

即模板参数推导;这与您使用 X 作为 FooBar 的值参数类型并在根本不使用任何模板参数的情况下调用它是一样的。在 IBM's compiler site 处有一份包含更多详细信息的文档.

关于c++ - 关于C++模板的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4894854/

相关文章:

c++ - 特定类型的范围概念

c++ - 根据类成员对同一键的多映射元素进行排序?

c++ - 模板的另一个问题

c++ - 使用 boost::variant 并获取通用返回类型

c++ - 模板类 <T> 中的 std::map 键为 <T>

c++ - 将字符串数组传递给模板化搜索函数

c++ - 为什么在 SFINAE 期间需要参数中的指针?

c++ - 为什么 std::regex_match 不支持 "zero-length assertions"?

c++ - C++中std::cin对象的规则是什么?

c++ - 用 C++ 创建 TNotifyEvent 以在应用程序级别使用