使用 MSVC(v19.33) 編譯,這不會編譯(C2668 對多載函式的模糊呼叫):
std::cout << std::isinf(0) << std::endl;
但這編譯:
std::cout << std::isinf(0.0) << std::endl;
但是,在cppreference.com中,它說:
- 一組多載或接受任何整數型別的 arg 引數的函式模板。等價于 (2)(引數轉換為 double)。
似乎該函式自 C 11 以來就已存在于標準中。
如果我理解正確,第一個代碼應該等同于第二個代碼,不是嗎?這是否意味著 MSVC 還沒有實作多載函式,或者我錯過了什么?
(相比之下,如果我使用 gcc 或 clang,上面的示例編譯沒有問題)。
uj5u.com熱心網友回復:
在微軟的實作中,定義isinf如下(從這里復制):
template <class _Ty>
_Check_return_ inline bool isinf(_In_ _Ty _X) throw()
{
return fpclassify(_X) == FP_INFINITE;
}
Microsoft 的問題fpclassify是缺少整數型別的多載。有關更多詳細資訊,請參閱:
'fpclassify':對多載函式的模糊呼叫。
我同意 MSVC 在這里是錯誤的觀點(但是,他們似乎不在乎)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/529840.html
標籤:C c 11重载决议
上一篇:JAVA
