我刚刚得到以下构造的编译器错误:
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)
该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)
| 归档时间: |
|
| 查看次数: |
198 次 |
| 最近记录: |