我可以从nullptr构造一个string_view吗?

我可以从nullptr构造一个string_view吗?

问题描述:

我刚刚发现xcode/clang不允许从char * nullptr构造std :: string_view。我期望这将size()设置为0,并为data()返回一个空值,这也是我Ubuntu Linux上的gcc 7.2如何实现它的。我可以从nullptr构造一个string_view吗?

我查过http://en.cppreference.com/但是找不到任何评论,所以标准说法是什么?

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

std::string_view的默认构造函数集大小为零,空它的数据,所以你将不得不使用该构造来代替,或者使用此解决方法/诀窍:

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

您都指向“[海峡,str + traits :: length(str))是一个有效范围。“但这在这里没有帮助。 [nullptr,0]肯定是一个有效的范围。所以这一切都取决于性状的标准定义::长度,我可以在哪里找到它? – Lothar

+0

@Lothar你可能知道'std :: string_view'只是'std :: basic_string_view >的别名。第二个参数是特征。它似乎没有说如果'我'超出范围会发生什么,所以我只是假设它是无效的[这里](https://timsong-cpp.github.io/cppwp/char .traits.require#标签:char.traits.require) – Rakete1111