【问题标题】:Can i construct a string_view from a nullptr?我可以从 nullptr 构造一个 string_view 吗?
【发布时间】:2017-11-11 17:16:38
【问题描述】:

我刚刚发现 xcode/clang 不允许从 char* nullptr 构造 std::string_view。我希望这会将 size() 设置为 0 并为 data() 返回 null,这也是我的 Ubuntu Linux 机器上的 gcc 7.2 实现它的方式。

我检查了http://en.cppreference.com/,但找不到任何关于此的评论,那么标准说法是什么?

【问题讨论】:

    标签: c++ string view


    【解决方案1】:

    嗯,是的,也不是。您不能将空指针传递给std::string_view 的构造函数,因为这将违反它们的先决条件;请参阅[string.view.cons] 中的构造函数 2 和 3。

    std::string_view 的默认构造函数将其数据的大小设置为零和 null,因此您必须改用该构造函数,或使用此解决方法/技巧:

    std::string_view().swap(your_string);
    

    【讨论】:

    • 您指向“[str, str + traits​::​length(str)) 是一个有效范围。”但这在这里没有帮助。 [nullptr,0] 肯定是一个有效范围。所以这完全取决于traits::length的标准定义,我在哪里可以找到这个?
    • @Lothar 你可能知道std::string_view 只是std::basic_string_view<char, std::char_traits<char>> 的别名。第二个参数是特征。它似乎没有说明如果i 超出范围会发生什么,所以我只是假设它无效here
    • 有一个proposal 允许nullptr 作为basic_string_view basic_string 的单个构造函数参数。
    • @MatthäusBrandl Jup,但委员会无法就此达成共识。我想它会在下一个再次出现,但我不确定。
    • 您可以简单地使用your_string_view = {}; 而不是交换技巧。
    猜你喜欢
    • 2021-01-21
    • 2010-11-20
    • 2014-05-07
    • 2010-09-23
    • 2016-01-10
    • 2018-07-31
    • 2010-11-02
    • 1970-01-01
    相关资源
    最近更新 更多