【问题标题】:implicitly convert string to string_view将字符串隐式转换为 string_view
【发布时间】:2020-07-30 04:27:25
【问题描述】:
void Foo1(string_view view) {
... 
}

string str = "one two three";

Foo1("one two three"); // Implicitly convert char* to string_view

Foo1(str); 

我想知道哪个构造函数将 char* 隐式转换为 string_view,哪个构造函数将字符串隐式转换为 string_view?

我知道构造函数 (4) 将 const char* 转换为 string_view,但我传递的是 char*。

【问题讨论】:

    标签: c++ string implicit-conversion string-view


    【解决方案1】:

    std::string_view有一个非explicitconverting constructorconst char*,它支持从const char*std::string_view的隐式转换。

    constexpr basic_string_view(const CharT* s);

    当你说:

    但我传递的是char*

    您实际上传递了一个string literal(即"one two three"),其类型为const char[14](包括空终止符'\0'),它可能衰减为const char*

    std::string 有一个非explicit conversion operator 支持从std::stringstd::string_view 的隐式转换。

    constexpr operator std::basic_string_view<CharT, Traits>() const noexcept;

    【讨论】:

    • 是什么让conversion operator 如此特别,以至于 string_view 的字符串是隐式的?我注意到 basic_string 也有 c_str() 函数,但这不会使字符串到 char* 隐式?
    • @echoLee std::string 定义了一个到std::string_view 的转换运算符,它是隐含的,因为它没有声明为explicitstd::string::c_str() 不是转换运算符,只是一个普通的方法。 std::string 没有定义任何到char* 的转换运算符,既不是隐式的也不是显式的。
    【解决方案2】:

    这是https://en.cppreference.com/w/cpp/string/basic_string/operator_basic_string_view

    连同string_view的拷贝构造函数(二)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-26
      • 1970-01-01
      相关资源
      最近更新 更多