相关疑难解决方法(0)

在重载解析期间调用转换运算符而不是在c ++ 17中转换构造函数

考虑以下两个类:

#define PRETTY(x) (std::cout << __PRETTY_FUNCTION__ << " : " << (x) << '\n')

struct D;

struct C {
    C() { PRETTY(this);}
    C(const C&) { PRETTY(this);}
    C(const D&) { PRETTY(this);}
};

struct D {
    D() { PRETTY(this);}
    operator C() { PRETTY(this); return C();}
};
Run Code Online (Sandbox Code Playgroud)

我们对两个构造函数之间的重载解析感兴趣:

C::C(const C&);
C::C(const D&);
Run Code Online (Sandbox Code Playgroud)

此代码按预期工作:

void f(const C& c){ PRETTY(&c);}
void f(const D& d){ PRETTY(&d);}
/*--------*/
D d;
f(d); //calls void f(const D& d)
Run Code Online (Sandbox Code Playgroud)

因为void f(const D& d)是一个更好的匹配.

但是:

D d;
C c(d); …
Run Code Online (Sandbox Code Playgroud)

c++ language-lawyer c++14 c++17

22
推荐指数
1
解决办法
604
查看次数

标签 统计

c++ ×1

c++14 ×1

c++17 ×1

language-lawyer ×1