C++ 省略C+中的参数+;模板
调用模板函数时,是否可以在函数名后省略类型C++ 省略C+中的参数+;模板,c++,templates,C++,Templates,调用模板函数时,是否可以在函数名后省略类型 作为一个例子,考虑函数 模板void f(T var){…} 可以这样简单地称呼它: int x=5 f(x) 或者我必须包括类型 int x=5 f(x) 使用隐式模板参数调用它没有什么错。编译器会让您知道它是否混淆,在这种情况下,您可能必须显式定义模板参数来调用函数。每当编译器可以从函数参数推断模板参数时,可以忽略它们。这也是一个很好的实践,因为它将使您的代码更易于阅读 此外,您只能将模板参数保留在末尾,而不能保留开头或中间: template&l
作为一个例子,考虑函数
模板void f(T var){…}
可以这样简单地称呼它:
int x=5
f(x)
或者我必须包括类型
int x=5
f(x)
使用隐式模板参数调用它没有什么错。编译器会让您知道它是否混淆,在这种情况下,您可能必须显式定义模板参数来调用函数。每当编译器可以从函数参数推断模板参数时,可以忽略它们。这也是一个很好的实践,因为它将使您的代码更易于阅读
此外,您只能将模板参数保留在末尾,而不能保留开头或中间:
template<typename T, typename U> void f(T t) {}
template<typename T, typename U> void g(U u) {}
int main() {
f<int>(5); // NOT LEGAL
f<int, int>(5); // LEGAL
g<int>(5); // LEGAL
g<int, int>(5); // LEGAL
return 0;
}
template void f(T T){
模板空g(U){}
int main(){
f(5);//不合法
f(5);//法律
g(5);//法律
g(5);//法律
返回0;
}
你就不能试试看会发生什么吗?“这似乎很容易测试。”Ed Swangren,“只是试试看”的方法非常缺乏信息。充其量,它告诉您特定的编译器允许给定的语法。它没有告诉你关于语言标准的语义或正确性。我想我本可以澄清这个问题。正如特伦特善意地指出的那样,这并不意味着它是否能够编译。我很好奇幕后发生了什么,很难找到好的信息@克丽丝:我认为你接受的答案不是很好的信息。它甚至没有真正意义,而且遗漏了很多细节。Zifre,我认为他的意思是“在这种情况下,你可能必须在函数调用中显式地包含模板参数”。我不谈论显式或隐式调用函数,我谈论显式地定义模板参数…@DeusAduro你能解释一下吗?我考虑如何调用函数,这激发了我的设计/定义。你是在区分语义还是我误解了什么?