将字符串隐式转换为string_view

7
void Foo1(string_view view) {
... 
}

string str = "one two three";

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

Foo1(str); 

enter image description here 我想知道哪个构造函数会隐式地将char*转换为string_view,哪个又会将string转换为string_view?

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

2个回答

13

std::string_view具有一个非显式的转换构造函数,接受const char*参数,支持从const char*隐式转换到std::string_view

constexpr basic_string_view(const CharT* s);

当你说:

但我传递的是char*

实际上传递的是字符串字面值(例如"one two three"),其类型为const char[14](包括空字符'\0'),可以退化为const char*

std::string也具有一个非显式的转换运算符,支持从std::string隐式转换到std::string_view

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


什么使得“转换运算符”特殊,以至于从string到string_view的转换是隐式的? 我注意到basic_string也有“c_str()”函数,但这并不意味着从string到char*的转换是隐式的。 - echo Lee
1
@echoLee std::string 定义了一个转换运算符到 std::string_view,并且它是隐式的,仅仅因为它没有声明为 explicitstd::string::c_str() 不是一个转换运算符,只是一个普通的方法。std::string 没有定义任何到 char* 的转换运算符,无论是隐式还是显式。 - Remy Lebeau

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接