将字符串隐式转换为 string_view
implicitly convert string to string_view
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?
我知道constructor (4) const char* to string_view 但我传递的是char*.
std::string_view
有一个非explicit
converting constructor取const char*
,支持从const char*
到std::string_view
的隐式转换。
constexpr basic_string_view(const CharT* s);
当你说:
but what I passed is char*
.
你实际上传递了一个string literal(即"one two three"
),其类型是const char[14]
(包括空终止符'[=19=]'
),它可能会衰减到const char*
.
而std::string
有一个非explicit
conversion operator支持从std::string
到std::string_view
的隐式转换。
constexpr operator std::basic_string_view<CharT, Traits>() const noexcept;
是https://en.cppreference.com/w/cpp/string/basic_string/operator_basic_string_view:
连同string_view的复制构造函数(2)
void Foo1(string_view view) {
...
}
string str = "one two three";
Foo1("one two three"); // Implicitly convert char* to string_view
Foo1(str);
我知道constructor (4) const char* to string_view 但我传递的是char*.
std::string_view
有一个非explicit
converting constructor取const char*
,支持从const char*
到std::string_view
的隐式转换。
constexpr basic_string_view(const CharT* s);
当你说:
but what I passed is
char*
.
你实际上传递了一个string literal(即"one two three"
),其类型是const char[14]
(包括空终止符'[=19=]'
),它可能会衰减到const char*
.
而std::string
有一个非explicit
conversion operator支持从std::string
到std::string_view
的隐式转换。
constexpr operator std::basic_string_view<CharT, Traits>() const noexcept;
是https://en.cppreference.com/w/cpp/string/basic_string/operator_basic_string_view:
连同string_view的复制构造函数(2)