是否可以对std :: min()进行类型转换?

Ste*_*fan 1 c++

我刚刚得到以下构造的编译器错误:

size_t N = 10;
size_t Ntransforms = std::min(PySequence_Fast_GET_SIZE(__transforms), N);
Run Code Online (Sandbox Code Playgroud)

因为PySequence_Fast_GET_SIZE()实际上返回Py_ssize_t并被std::min()定义为

template <class T> const T& min (const T& a, const T& b);
Run Code Online (Sandbox Code Playgroud)

由于它需要相同类型的左值引用,我很惊讶我可以使用内联类型转换来修复它:

size_t Ntransforms = std::min((size_t)PySequence_Fast_GET_SIZE(__transforms), N);
Run Code Online (Sandbox Code Playgroud)

这个可以吗?如果是,它是否等同于显式代码:

size_t Ntransforms = PySequence_Fast_GET_SIZE(__transforms);
if (Ntransforms > N) Ntransforms = N;
Run Code Online (Sandbox Code Playgroud)

Pio*_*cki 6

std::min签名强制同一类型的参数:

 template <class T> const T& min (const T& a, const T& b);
Run Code Online (Sandbox Code Playgroud)

如果参数类型不同,则调用不明确.

但是,可以使用临时值(例如来自转换表达式)代替参数,因为std::min它采用const左值引用.

或者,您可以强制用于实例化的类型std::min:

std::min<std::size_t>(PySequence_Fast_GET_SIZE(__transforms), N);
Run Code Online (Sandbox Code Playgroud)