【问题标题】:Passing xvalue of std::string to function taking std::string_view将 std::string 的 xvalue 传递给采用 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这个问题会更有趣。

标签: c++ c++17 string-view


【解决方案1】:

这是定义明确的行为,尽管它不是特别有用。 basic_stringoperator basic_string_view 将用于执行转换,它没有左值/右值限制。因此,如果您根本没有使用 move,它会做同样的事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-07
    • 1970-01-01
    • 2022-01-03
    • 2021-01-23
    • 1970-01-01
    • 2021-12-29
    • 1970-01-01
    • 2015-09-26
    相关资源
    最近更新 更多