小编pip*_*pex的帖子

构造函数解析顺序的问题

考虑以下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("");
Run Code Online (Sandbox Code Playgroud)
  1. 为什么在构造t时T(const bool)优先考虑T(const std::string&)
  2. 由于上述优先级可能会导致混淆期望T(const std::string&)被调用的用户,T(const std::string&)在将字符串文字传递给T的构造函数时,我可以做什么来隐式调用.现在,我发现的唯一工作是添加另一个构造函数,最高优先权:

    T(const char* s)
    {
        std::cout << "T(const char*)" << endl;
        *this = std::string(s);
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 除了上述解决方案之外,声明explicit T(const bool)避免混淆并不能解决上述问题:在这种情况下,虽然T t = ""现在已被禁止,为什么表格T t("")仍然被允许并打电话T(const bool)

c++ overloading operator-overloading implicit-conversion

7
推荐指数
1
解决办法
188
查看次数