1

有谁知道 std::string.assign(NULL) 的行为是什么?分配 NULL(使用运算符)或从 NULL 构造是未定义的。是否同样适用于此功能?

4

2 回答 2

4

该标准在 21.4.6.3 第 12 段中这样说:

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

在性格特征要求表62中说:

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

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

于 2013-11-11T01:34:58.397 回答
1

从 NULL“C 字符串”分配 C++ 字符串是未定义的行为,因为空指针实际上根本不指向 C 字符串。我找不到任何参考说 std::string 应该检查 NULL——你需要自己做。

于 2013-11-11T01:32:16.873 回答