我刚拿到下构建一个编译器错误:是否可以对std :: min()进行类型转换?
size_t N = 10;
size_t Ntransforms = std::min(PySequence_Fast_GET_SIZE(__transforms), N);
因为PySequence_Fast_GET_SIZE()
实际上返回Py_ssize_t
和std::min()
由于需要相同类型的左值引用定义为
template <class T> const T& min (const T& a, const T& b);
,我很惊讶我可以使用内联类型转换来修复它:
size_t Ntransforms = std::min((size_t)PySequence_Fast_GET_SIZE(__transforms), N);
这是 好?如果是的话,是不是等同于明确的代码:
size_t Ntransforms = PySequence_Fast_GET_SIZE(__transforms);
if (Ntransforms > N) Ntransforms = N;
假设'PySequence_Fast_GET_SIZE'不会再回到负值,当然,你也可以提供一个明确的模板类型,而不是即'的std ::分钟',依靠隐式转换。虽然在这里没有什么区别,但你可能想要避免使用c风格的转换,但最好养成使用'static_cast'的习惯。 –
user657267
2014-08-28 09:08:16
'min'需要'const lvalue references',因此它们绑定到临时表。 – 2014-08-28 09:08:21
奇怪的命名约定:'PySequence_Fast_GET_SIZE'。 – Nawaz 2014-08-28 09:08:41