【发布时间】:2011-10-29 11:36:08
【问题描述】:
考虑以下 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)?
【问题讨论】:
标签: c++ operator-overloading overloading implicit-conversion