假设如下模板定义(代码无意义):
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/