我刚刚发现 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);
basic_string_view(nullptr)
在 C++23 中被定义为删除:
constexpr basic_string_view( std::nullptr_t ) = delete;
cppreference.com 上的不能由std::basic_string_view
构造。nullptr
std::basic_string_view
请参阅提案 P0903R2 了解更多信息和动机。