考慮T的下面的構造函數:問題與構造解析順序
struct T {
T(const bool) { std::cout << "T(const bool)" << endl; }
T(const std::string&) { std::cout << "T(const std::string&)" << endl; }
};
T t("");
- 構建T當爲什麼
T(const bool)
優先T(const std::string&)
? 由於上述優先級可能會導致希望調用
T(const std::string&)
的用戶感到困惑,因此在將字符串文字傳遞給T的構造函數時,我可以做些什麼來隱式調用T(const std::string&)
。現在我發現的唯一工作就是添加另一個構造,這需要最高優先級:T(const char* s) { std::cout << "T(const char*)" << endl; *this = std::string(s); }
除了上述解決方案,宣佈
explicit T(const bool)
避免混淆不解決上述問題:在這種情況下,雖然T t = ""
現在禁止,爲什麼是形式T t("")
仍然被允許並確實打電話給T(const bool)
?
非常感謝解決方案模板 – pipex
'enable_if'應該以'... :: type * = 0'結尾。 – UncleBens
@UncleBens:非常感謝。固定。 –