- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
考虑以下程序:
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/
对于我的一个项目,我终于需要使用我的第一个多态类(std::cout 除外)。 我正在研究如何确保至少在某些情况下我有 100% 的去虚拟化调用。 这段代码是否合法可行? dynamic_cast 有
最近有一个编译问题,用这个片段说明: struct Base { }; template struct A : Base { A(){} A(Base&&) {} }; A foo()
注意:这是一个冗长的问题,需要对 MVVM“设计模式”、JSON 和 jQuery 有很好的理解.... 所以我有一个理论/主张 DHTML 中的 MVVM 是可能的 和可行的 并且想知道您是否同意/
我有一台 Mac 服务器,我正在构建 PHP 代码以允许用户上传图像、文档甚至视频文件。研究这个肯定让我很紧张,我希望上传的内容没有病毒。 自己构建一些东西会是一个巨大的挑战吗?您会这样做,还是会
根据文档,ASP.NET 项目(尚)不支持新的 PackageReference https://learn.microsoft.com/en-us/nuget/consume-packages/pa
我是一名优秀的程序员,十分优秀!