【发布时间】: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/,但找不到任何关于此的评论,那么标准说法是什么?
【问题讨论】:
我刚刚发现 xcode/clang 不允许从 char* nullptr 构造 std::string_view。我希望这会将 size() 设置为 0 并为 data() 返回 null,这也是我的 Ubuntu Linux 机器上的 gcc 7.2 实现它的方式。
我检查了http://en.cppreference.com/,但找不到任何关于此的评论,那么标准说法是什么?
【问题讨论】:
嗯,是的,也不是。您不能将空指针传递给std::string_view 的构造函数,因为这将违反它们的先决条件;请参阅[string.view.cons] 中的构造函数 2 和 3。
但std::string_view 的默认构造函数将其数据的大小设置为零和 null,因此您必须改用该构造函数,或使用此解决方法/技巧:
std::string_view().swap(your_string);
【讨论】:
std::string_view 只是std::basic_string_view<char, std::char_traits<char>> 的别名。第二个参数是特征。它似乎没有说明如果i 超出范围会发生什么,所以我只是假设它无效here
nullptr 作为basic_string_view 和 basic_string 的单个构造函数参数。
your_string_view = {}; 而不是交换技巧。