【发布时间】:2019-11-03 12:52:15
【问题描述】:
C++14 标准 (N4296) 在 8.5/17.6.1 中说
如果初始化是直接初始化 [...],则考虑构造函数。列举了适用的构造函数,最好的 一个是通过重载决议选择的。 [...] 如果没有构造函数 适用,或者重载决议不明确,初始化格式不正确。
因此,在直接初始化中,只考虑构造函数 - 忽略转换函数。在下面的代码中,没有A 的适用构造函数,只有B 的转换函数。但是,代码可以编译,为什么?
struct A{};
struct B{
operator A(){ return A{}; }
};
int main() {
B b;
A a(b); // direct-initialization
}
【问题讨论】:
-
部分通过重载决议选择正在应用转换。我会尝试找到适用的部分。
-
请解释为什么您认为它不应该找到复制构造函数。
标签: c++ constructor language-lawyer implicit-conversion overload-resolution