gpt4 book ai didi

c++ - 复制构造函数是可行的重载吗?

转载 作者:太空狗 更新时间:2023-10-29 23:48:39 26 4
gpt4 key购买 nike

考虑以下程序:

struct A {
A(int){}
A(A const &){}
};

int main() {
A y(5);
}

变量y直接用表达式5初始化。重载决策选择构造函数A::A(int),这是我期望和想要的,但为什么会这样?

可能有两个原因:

要么重载 A::A(int)A::A(A const &) 更好,要么第二个不可行完全过载。

问题:在上面的程序中,构造函数A::A(A const &)是否是y初始化的可行重载?

最佳答案

是的,构造函数重载的规则与普通函数相同。允许编译器对每个参数进行一个用户定义的转换- 正如 Ben Voigt 所指出的- 以便将参数与实参相匹配。在这种情况下,它可以通过 A(5)

执行 int->A

这种情况是一样的:

void foo(const std::string&);
void bar(const std::string&);//1
void bar(const char*);//2

//...
foo("Hello");//Is allowed
bar("Hello");//Calls 2 as it matches exactly without a need for conversion.

所以,答案是,它是可行的过载但未被选择,因为根据 overloading rules A(int) 构造函数更匹配。

关于c++ - 复制构造函数是可行的重载吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56024688/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com