将 std::string 的 xvalue 传递给采用 std::string_view 的函数
Posted
技术标签:
【中文标题】将 std::string 的 xvalue 传递给采用 std::string_view 的函数【英文标题】:Passing xvalue of std::string to function taking std::string_view 【发布时间】:2017-01-24 18:26:58 【问题描述】:是UB做以下吗?
void foo(std::string_view view) ...
void bar()
std::string str;
foo(std::move(str));
谢谢!
【问题讨论】:
很确定它只是无法编译。 @nwp,我会在确定之前尝试一下。它编译只是因为 string_view 有 ctor 采用 const string& 你认为这个 UB 到底是什么?string_view
是只读的,move
实际上并没有移动任何东西。这只是一个演员表。
@Bikineev:“string_view 让 ctor 采用 const string&” 不,它没有。它的许多非标准实现确实如此,但实际的 C++17 basic_string_view
并不能那样工作。发生转换是因为basic_string
将自己转换为basic_string_view
;视图类被认为是两者中更基本的。
如果你问我认为prvalues这个问题会更有趣。
【参考方案1】:
这是定义明确的行为,尽管它不是特别有用。 basic_string
的operator basic_string_view
将用于执行转换,它没有左值/右值限制。因此,如果您根本没有使用 move
,它会做同样的事情。
【讨论】:
以上是关于将 std::string 的 xvalue 传递给采用 std::string_view 的函数的主要内容,如果未能解决你的问题,请参考以下文章
将 std::string_view 传递给执行 const std::string& 的 API
将`char []`传递给接受`std :: string&`的函数是不是是一种好习惯
如何将 std::string 环境块传递给 CreateProcess?