You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用初始化列表作为构造函数参数时重载函数调用歧义问题咨询

使用初始化列表作为构造函数参数时重载函数调用歧义问题咨询

大家好,我最近写C++代码时碰到了一个编译报错的问题,想请教下各位:当一个类同时定义了显式单参数构造函数拷贝/移动构造函数时,要是用初始化列表的形式传递构造参数,编译器就会抛出调用歧义的错误。

具体的错误提示是这样的:

error: call of overloaded 'Base()' is ambiguous

更详细的错误日志和对应的示例代码如下:

<source>: In function 'int main()':
<source>:33:23: error: call of overloaded 'Base(<brace-enclosed initializer list>)' is ambiguous
   33 |     Base obj{1};
      |                       ^
<source>:10:5: note: candidate: 'Base::Base(int)'
   10 |     explicit Base(int val) : value(val) {}
      |     ^~~~
<source>:14:5: note: candidate: 'Base::Base(const Base&)'
   14 |     Base(const Base& other) = default;
      |     ^~~~
<source>:15:5: note: candidate: 'Base::Base(Base&&)'
   15 |     Base(Base&& other) = default;
      |     ^~~~

就像上面的例子,我定义了Base类,有一个显式接收int参数的构造函数,还有默认生成的拷贝、移动构造函数,当用Base obj{1};这种方式初始化对象时,编译器就分不清该调用哪个构造函数了,有没有大佬能帮忙解释下歧义产生的原因,以及对应的解决办法呀?

内容来源于stack exchange

火山引擎 最新活动