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

同参数类型构造函数的auto类型推导问题

问题解答

这适用C++里auto类型推导遵循模板参数推导规则的条款,核心逻辑是:用auto声明变量并通过表达式直接初始化时,auto会推导为初始化表达式的原始实际类型,不会自动触发隐式转换去匹配自定义类的构造函数。

结合你的代码拆解:

  • "b"s是C++标准库提供的字符串字面量,它的实际类型就是std::string。
  • 写auto b("b"s);时,auto的推导逻辑和模板参数推导完全一致:
    template<typename T>
    void test(T param);
    test("b"s); // 这里T会被推导为std::string,和auto的推导结果一模一样
    
  • 你的AB类虽然能通过const std::string&构造实现隐式转换,但这种转换不在auto推导的考虑范围内——auto只会抓取初始化表达式本身的类型,不会去尝试“能不能转成别的类型”。

如果想要让b的类型是AB,得显式触发构造:

auto b = AB("b"s); // 显式构造AB实例,auto会推导为AB类型

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 22:40:28