【发布时间】: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这个问题会更有趣。
标签: c++ c++17 string-view