同参数类型构造函数的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
相关产品推荐
相关产品推荐

