关于C++模板的问题

min*_*ang 3 c++ templates

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

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

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

float temp = 0.f;
FooBar<int>(temp);
Run Code Online (Sandbox Code Playgroud)

如您所见,Y可以省略第二个类型参数.编译器Y通过查看参数类型来推断类型temp.

什么规则或规范的C++模板允许这个?我很惊讶地看到它.

Jer*_*ock 5

这是模板参数推导; 它就像你用作X值参数的类型一样,FooBar并且在没有任何模板参数的情况下调用它.在IBM的编译器站点上有一个包含更多详细信息的文档.