C++ “type*=nullptr”的含义是什么

C++ “type*=nullptr”的含义是什么,c++,c++11,visual-c++,C++,C++11,Visual C++,我不明白 template<class T> T foo2(T t, typename std::enable_if<std::is_integral<T>::value >::type* = nullptr) { return t; } 类型*=0?这是什么。在C/C++中,可以在函数声明中省略参数的名称。有时在将接口与实现分离时,这是一种首选样式,以避免混淆函数原型和实现的参数名称。我以前从未见过有人这样做。但正如@IgorTandetnik所

我不明白

template<class T>
T foo2(T t, typename std::enable_if<std::is_integral<T>::value >::type* = nullptr) 
{
    return t;
}

类型*=0?这是什么。

在C/C++中,可以在函数声明中省略参数的名称。有时在将接口与实现分离时,这是一种首选样式,以避免混淆函数原型和实现的参数名称。我以前从未见过有人这样做。但正如@IgorTandetnik所指出的,他们接下来要做的是用默认值初始化该伪参数。

在C/C++中,您可以在函数声明中省略参数的名称。有时在将接口与实现分离时,这是一种首选样式,以避免混淆函数原型和实现的参数名称。我以前从未见过有人这样做。但正如@IgorTandetnik指出的那样,他们接下来要做的是用默认值初始化该伪参数。

这是一种实现方法:只有在所有类型都可以正确替换的情况下,才能选择该函数

如果std::is_integral::value为false,即T不是整数类型,将没有成员类型,因此会发生替换失败,并且不会调用此函数,并且可能会出现不同的重载

如果T是整型,那么typename std::enable_If::type将为void,因此第二个参数的类型将为void*。它是一个默认值为nullptr的未命名参数,因此您不必指定它

你可以这样称呼它:

食物20;//T是整数,因此可以调用该函数 foo20,nullptr;//同上,但显式传递参数 //无法调用函数,因为'double'不是整数, //所以第二种类型是替换失败 //foo20.0; 请注意,这通常可以通过使用默认模板参数来实现:

//相同的'void*`如果为整数,则为替换失败 样板 T foo2T { 返回t; } //或者,如果是整数,则使用'int',否则替换失败 样板 T foo2T { 返回t; } 或直接在返回类型中:

样板 //如果是整数,则返回'T',否则替换失败 typename std::enable_if::type foo2T t { 返回t; } 在C++20中,您可以在本例中使用requires或概念

模板需要std::is_integral_v T foo2T { 返回t; } 样板 T foo2T { 返回t; }
这是一种实现方法:只有在所有类型都可以正确替换的情况下才能选择该功能

如果std::is_integral::value为false,即T不是整数类型,将没有成员类型,因此会发生替换失败,并且不会调用此函数,并且可能会出现不同的重载

如果T是整型,那么typename std::enable_If::type将为void,因此第二个参数的类型将为void*。它是一个默认值为nullptr的未命名参数,因此您不必指定它

你可以这样称呼它:

食物20;//T是整数,因此可以调用该函数 foo20,nullptr;//同上,但显式传递参数 //无法调用函数,因为'double'不是整数, //所以第二种类型是替换失败 //foo20.0; 请注意,这通常可以通过使用默认模板参数来实现:

//相同的'void*`如果为整数,则为替换失败 样板 T foo2T { 返回t; } //或者,如果是整数,则使用'int',否则替换失败 样板 T foo2T { 返回t; } 或直接在返回类型中:

样板 //如果是整数,则返回'T',否则替换失败 typename std::enable_if::type foo2T t { 返回t; } 在C++20中,您可以在本例中使用requires或概念

模板需要std::is_integral_v T foo2T { 返回t; } 样板 T foo2T { 返回t; } 它与类型*dummy_parameter=nullptr相同,省略了参数名。指针类型的参数,指向nullptr的类型和默认值。它与类型*dummy_parameter=nullptr相同,省略了参数名。指针类型的参数,指向nullptr的类型和默认值。