C++ 我可以从nullptr构造字符串视图吗?

C++ 我可以从nullptr构造字符串视图吗?,c++,string,view,C++,String,View,我刚刚发现xcode/clang不允许从char*nullptr构造std::string_视图。我希望这会将size()设置为0,并为data()返回null,这也是我的Ubuntu Linux机器上gcc 7.2实现它的方式 我查过了,但找不到对此的任何评论,那么标准是怎么说的呢 好的,是和否。您不能将空指针传递给std::string\u view的构造函数,因为这将违反它们的先决条件;请参见中的构造函数2和3 但是std::string_view的默认构造函数将其数据的大小设置为零和nu

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


我查过了,但找不到对此的任何评论,那么标准是怎么说的呢

好的,是和否。您不能将空指针传递给
std::string\u view
的构造函数,因为这将违反它们的先决条件;请参见中的构造函数2和3

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

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

你指的是“[str,str+traits​::​长度(str))是一个有效的范围。“但这在这里没有帮助。[nullptr,0]确实是一个有效的范围。所以这完全取决于traits::length的标准定义,我在哪里可以找到它?@Lothar你可能知道
std::string\u view
只是
std::basic\u string\u view
的别名。第二个参数是traits。它似乎没有说明如果
i
超出范围会发生什么,so我只是假设允许
nullptr
作为
basic\u string\u视图
basic\u string
@MatthäusBrandl Jup的单个构造函数参数是无效的,但委员会无法就此达成共识。我认为它将在下一次会议上再次出现,但我不确定。你可以简单地做
 您的_string_view={};
而不是交换技巧。