C++ std::string.assign的行为(NULL)?

C++ std::string.assign的行为(NULL)?,c++,std,C++,Std,有人知道std::string.assign(NULL)的行为吗?未定义赋值NULL(使用运算符)或从NULL构造。对于这个函数是否适用?< p>它是从空的“C字符串”中分配C++字符串的未定义行为,因为空指针实际上根本没有指向C字符串。我找不到一个引用,说明STD::String应该检查null,你需要自己做。 < P>这是一个未定义的行为,它从空的“C字符串”中分配C++字符串,因为空指针实际上并没有指向C字符串。我找不到任何关于std::string应该检查NULL的参考——您需要自己检查

有人知道std::string.assign(NULL)的行为吗?未定义赋值NULL(使用运算符)或从NULL构造。对于这个函数是否适用?

< p>它是从空的“C字符串”中分配C++字符串的未定义行为,因为空指针实际上根本没有指向C字符串。我找不到一个引用,说明STD::String应该检查null,你需要自己做。

< P>这是一个未定义的行为,它从空的“C字符串”中分配C++字符串,因为空指针实际上并没有指向C字符串。我找不到任何关于std::string应该检查NULL的参考——您需要自己检查。

标准在21.4.6.3第12段中规定:

要求:s指向至少包含traits::length(s)+1个图表元素的数组

在性格特征要求表62中指出:

X::length(p)std::size\u t产生:最小的i,使得X::eq(p[i],charT())为真。线性的


这意味着
traits::length()
将取消对
s
的引用,因此,
s
不能是指向null的指针。您会得到未定义的行为。

标准在21.4.6.3第12段中规定:

要求:s指向至少包含traits::length(s)+1个图表元素的数组

在性格特征要求表62中指出:

X::length(p)std::size\u t产生:最小的i,使得X::eq(p[i],charT())为真。线性的


这意味着
traits::length()
将取消对
s
的引用,因此,
s
不能是指向null的指针。你有未定义的行为。

你能告诉我你在哪里找到那句话吗?我只能在Boost文档中找到类似的东西。不管怎样,我不得不下载一个PDF。。。曾经以为C++的人会希望人们看到这个标准,但显然他们不只是谷歌的那个短语!你能告诉我你在哪里找到那句话吗?我只能在Boost文档中找到类似的东西。不管怎样,我不得不下载一个PDF。。。曾经以为C++的人会希望人们看到这个标准,但显然他们不只是谷歌的那个短语!谢谢我知道这段代码试图做的是“道德上”错误的,但从技术上讲,内存位置0不能包含以null结尾的字符串并没有实际原因。这就是为什么我想知道对它的“现代”解释(具有正确定义的nullptr)是否真的会捕获错误,而不是引发硬件/操作系统。谢谢。我知道这段代码试图做的是“道德上”错误的,但从技术上讲,内存位置0不能包含以null结尾的字符串并没有实际原因。这就是为什么我想知道对它的“现代”解释(具有正确定义的nullptr)是否真的会捕获错误,而不是引发硬件/操作系统。