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

std::string_view转std::string的编译差异原因及正确调用方法

编译结果差异的核心原因

std::string接收std::string_view参数的构造函数是被explicit关键字修饰的,C++标准对explicit构造函数的使用规则有明确限制:

  • 仅允许在显式直接初始化场景下调用
  • 禁止在隐式类型转换场景下自动调用

第一段代码中,构造函数初始化列表的str{ str_view }属于显式直接初始化,符合explicit构造函数的调用规则,因此可以正常编译。
第二段代码中,调用foo(str_view)时需要把std::string_view类型隐式转换为std::string类型给形参,属于隐式类型转换场景,无法自动调用explicit修饰的转换构造函数,因此编译器会报转换失败的错误。

正确调用foo()的方案

只需要显式触发std::string的构造即可,常用写法有以下几种:

  • 直接显式构造std::string对象
    foo(std::string(str_view));
    // 或统一初始化写法
    foo(std::string{str_view});
    
  • 用static_cast做显式类型转换
    foo(static_cast<std::string>(str_view));
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 14:06:04