You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++ Bar类合法构造方式判断的考试题目咨询

关于Bar类合法构造调用的验证与纠正

给定Bar类的定义:

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

先直接给出结论:你的判断有误,合法的构造选项是a和c,d选项无法完成构造,下面逐个拆解分析:

选项a) Bar{4,2,6};

完全合法。这个调用会匹配第二个带默认参数的构造函数:

  • 4作为int直接匹配第一个参数int a;
  • 2是int,可隐式转换为double b;
  • 6是int,可隐式转换为char c(对应ASCII码为6的控制字符)。
    C++允许这些基础类型之间的隐式转换,因此构造有效。

选项b) Bar{"xyz",2};

不合法。有两个匹配方向都走不通:

  • 若尝试匹配Bar(std::string)构造函数,它只接受一个参数,但这里传了两个,参数数量不匹配;
  • 若尝试匹配第二个构造函数,"xyz"是const char*,C++不允许指针隐式转换为int,因此没有合适的构造函数可用。

选项c) Bar(true,false);

合法。bool类型可以隐式转换为int和double:

  • true会被转换为int值1,对应int a;
  • false会被转换为double值0.0,对应double b;
  • 第三个参数使用构造函数的默认值'e'。
    完全符合第二个构造函数的参数要求,构造有效。

选项d) Bar{5,"abc"};

不合法。尝试匹配第二个构造函数时,第二个参数"abc"是const char*,C++不允许指针类型隐式转换为double;同时也无法匹配单参数的Bar(std::string)(参数数量不对),因此没有可用的构造函数,编译会报错。

选项e) Bar();

单独出现时,这是一个函数声明(声明一个返回Bar类型的无参函数),而非构造Bar对象的语句。只有在表达式语境中(比如auto obj = Bar();)才会调用构造函数,但题目中的写法不属于合法的对象构造方式。

内容的提问来源于stack exchange,提问作者Xavi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 17:45:37