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

为何可使用标量值初始化C++类/结构体?

解答

这是C++中拷贝初始化与隐式类型转换共同作用的结果:

  1. 当使用T obj = value;的形式时,属于拷贝初始化语法。编译器会尝试将右侧的value转换为T类型的临时对象,再用这个临时对象初始化obj(C++17及以后,这个临时对象可能会被编译器省略,直接构造obj,但语法逻辑不变)。
  2. 第二个代码中,MyStruct定义了一个接受int的非explicit构造函数。非explicit的构造函数允许编译器进行隐式类型转换——自动用这个构造函数把int转换成MyStruct对象,满足拷贝初始化的要求。
  3. 如果给这个构造函数加上explicit修饰,隐式转换会被禁止,此时MyStruct foo = 1;就会报错,必须显式写成MyStruct foo = MyStruct(1);或者MyStruct foo(1);。
  4. 第一个代码报错的原因是:MyStruct没有能接受int的构造函数,编译器找不到合法的转换路径,因此抛出类型转换错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 03:58:18