Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 省略C+中的参数+;模板_C++_Templates - Fatal编程技术网

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你能解释一下吗?我考虑如何调用函数,这激发了我的设计/定义。你是在区分语义还是我误解了什么?