c++ 隐式调用构造函数

nbysray5  于 2022-12-24  发布在  其他
关注(0)|答案(1)|浏览(233)

我有一个考试题是这样的:
酒吧可以用...
我必须选择正确的选项:

class Bar{
public:
    Bar(std::string);
    Bar(int a=10,double b=7.10, char c='e');
};

a)杆{4,2,6};
B)杆{“xyz”,2};
(c)酒吧(对、错);
d)横杠{5,“abc”};
e)酒吧();
我认为它肯定可以用a)来构造(intchar的隐式转换).我也认为应该不能用b)d)构造,因为const char*double没有隐式转换.我认为Bar()是函数原型,所以这是不可能的。那么c)的真和假可以转换成intdouble。所以我的想法是:a)d)可以正确地构造Bar
我说的对吗?有经验的人能证实吗?

vcirk6k6

vcirk6k61#

我认为Bar()是函数原型,所以这是毫无疑问的。
不,Bar::Bar(int =10,double =7.10, char ='e')声明了一个默认构造函数,所以Bar()是完全有效的,并且将use the above default ctor
类似地,Bar{4,2,6};Bar(true, false)也将使用默认ctor。

class Bar{
public:
Bar(std::string){}
Bar(int a=10,double b=7.10, char c='e'){
    std::cout <<"default " << std::endl; 
}
};
int main()
{
    Bar(true, false); //uses default ctor
    Bar();           //uses default ctor see demo link below
    Bar{1,2,3};      //uses default ctor

}

Demo

相关问题